Само за да дадем отговор - тъй като тази грешка е доста често срещана - ето няколко причини:
1) :parameter
името не съвпада с обвързването по погрешка (печатна грешка?). Ето какво се случи тук. Той има :alias
в SQL израза, но обвързан :username
. Така че, когато се направи опит за свързване на параметри, Yii/PDO не можа да намери :username
в оператора sql, което означава, че е бил "един параметър кратък" и е довел грешка.
2) Напълно забравих да добавите bindValue()
за параметър. Това е по-лесно да се направи в други конструкции на Yii като $critera
, където имате масив или параметри ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
).
3) Странни конфликти с CDataProvider Pagination и/или Сортиране при използване на together
и joins
. Няма конкретен, лесен начин да се характеризира това, но когато използвам сложни заявки в CDataProviders, имах странни проблеми с отпадането на параметрите и възникването на тази грешка.
Един много полезен начин за отстраняване на тези проблеми в Yii е да да активирате регистрирането на параметри
във вашия конфигурационен файл. Добавете това към вашия db
масив във вашия конфигурационен файл:
'enableParamLogging'=>true,
И се уверете, че CWebLogRoute
маршрутът е настроен във вашия log
раздел. Това ще разпечата заявката, която е дала и грешката, и всички параметри, които се опитва да обвърже. Супер полезно!