答えを提供するためだけに-このエラーはかなり一般的であるため-ここにいくつかの原因があります:
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に設定されています セクション。これにより、エラーが発生したクエリと、バインドしようとしたすべてのパラメータが出力されます。とても助かりました!