Само за да дадем отговор - тъй като тази грешка е доста често срещана - ето няколко причини:
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 раздел. Това ще разпечата заявката, която е дала и грешката, и всички параметри, които се опитва да обвърже. Супер полезно!