SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
【環境】
Symfony:1.4.13
doctrine:1.2.4
Symfony:1.4.13
doctrine:1.2.4
エラー
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
引数の数が合ってないよっと。
状況1
i18n データを取得しようとして、データ取得 の如く
find メソッドで取得しようとして起きた。
原因
i18n データを取得するのに、親テーブルへアクセスして
Translation テーブルの主キーのデータを渡していた。
- $category = Doctrine::getTable('Category')->find(Array($id, $culture));
解決
親テーブルの主キーは ID のみなので、下記のように変更して解決。
- $category = Doctrine::getTable('Category')->find($id);
状況2
DQL でサブクエリを利用しようとした。
ただ、メインクエリとサブクエリと
同一のテーブルだった。
- $query = Doctrine::getTable('Relation')->createQuery('r')
- ->select('r.hoge_id');
- $sub_query = $query->createSubquery()
- ->select('sub.hoge_id')
- ->from('Hoge sub')
- ->where('sub.category_id = ?', 123);
- $query->where("r.hoge_id IN ({$sub_query->getDql()})")
- ->andWhere('r.category_id = ?', 456);
原因
テーブルエイリアスを変えてみたものの
category_id というカラムは同一と見なされ、値は2種類あるので、
数が合ってない、ということみたい。
解決
解決できてないけど、そもそもこの DQL は、本命からずれたお試しだったので
本命の DQL に戻しただけ。
直接の解決策は見つかっていない。