答えを提供するためだけに-このエラーはかなり一般的であるため-ここにいくつかの原因があります:
1):parameter
名前が誤ってバインドと一致しません(タイプミス?)。これがここで起こったことです。彼は:alias
を持っています SQLステートメントで、ただしバインドされた:username
。したがって、paramバインディングが試行されたとき、Yii / PDOは:username
を見つけることができませんでした sqlステートメントで、「1つのパラメーターが不足している」ことを意味し、エラーをスローしました。
2)bindValue()
を追加するのを完全に忘れている パラメータの場合。これは、$critera
のようなYiiの他の構造で行うのが簡単です。 、ここで配列またはパラメータがあります($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
。
3)together
を使用すると、CDataProviderのページネーションや並べ替えと奇妙な競合が発生します およびjoins
。これを特徴付ける具体的で簡単な方法はありませんが、CDataProvidersで複雑なクエリを使用すると、パラメーターが削除されてこのエラーが発生するという奇妙な問題が発生しました。
Yiiでこれらの問題をトラブルシューティングするための非常に役立つ方法の1つは、パラメーターロギングを有効にすることです。
設定ファイルにあります。これをdb
に追加します 構成ファイルの配列:
'enableParamLogging'=>true,
また、CWebLogRoute
を確認してください ルートはlog
に設定されています セクション。これにより、エラーが発生したクエリと、バインドしようとしたすべてのパラメータが出力されます。とても助かりました!