1

次のクエリは、phpmyadminから実行すると、期待どおりに1行を返します。

SELECT units .  * , locations .  *
FROM units, locations
WHERE units.id = '1'
AND units.location_id = locations.id
LIMIT 0 , 30 

しかし、私がコハナ3でそれをやろうとすると:

$unit = DB::select('units.*', 'locations.*')
->from('units', 'locations')
->where('units.id', '=', $id)->and_where('units.location_id', '=', 'locations.id')
->execute()->as_array();
var_dump($unit);

印刷します

array(0){}

私は何が間違っているのですか?

4

2 に答える 2

5

そのクエリビルダーの何が問題なのかすぐにはわかりませんが、デバッグ目的でこれをチェックアウトしてください。

execute()データベースチェーンを呼び出した後、これを試してください。

echo Database::instance()->last_query;

これにより、最後に実行されたクエリがプレーン SQL で表示されます。クエリ ビルダーが生成したものと、それが phpmyadmin で使用した SQL とどのように異なるかを調べる価値があります。

他のすべてが失敗した場合は、単純なクエリ メソッドを使用してください。

$query = "SELECT units .  * , locations .  *
FROM units, locations
WHERE units.id = :id
AND units.location_id = locations.id
LIMIT 0 , 30 ";

$unit = Db::query(Database::SELECT, $query)
          ->bind(':id', (int) $id)
          ->execute()
          ->as_array();
于 2010-05-31T23:27:31.483 に答える
0

last_queryへの呼び出しが返されたことに気付くでしょう(where部分で):

WHERE units.location_id = 'locations.id'比較のために渡される値は文字列として引用されているため、空の結果セットになります。これはあなたを助けるかもしれません: http://kohanaframework.org/guide/api/DB#expr

致命的なエラーについては、 $id を明示的に渡していること (別の変数の参照されたコピーではないこと) を再確認してください。

于 2010-06-06T02:33:34.987 に答える