Wystarczy udzielić odpowiedzi — ponieważ ten błąd jest dość powszechny — oto kilka przyczyn:
1) :parameter nazwa nie pasuje do powiązania przez pomyłkę (literówka?). Oto, co się tutaj wydarzyło. Ma :alias w instrukcji SQL, ale powiązany :username . Więc kiedy próbowano powiązać param, Yii/PDO nie mogło znaleźć :username w oświadczeniu sql, co oznacza, że był "jeden parametr krótki" i spowodował błąd.
2) Całkowicie zapomniałem dodać bindValue() dla parametru. Jest to łatwiejsze w innych konstrukcjach Yii, takich jak $critera , gdzie masz tablicę lub parametry ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test) ).
3) Dziwne konflikty z CDataProvider Pagination i/lub sortowaniem podczas używania together i joins . Nie ma konkretnego, łatwego sposobu na scharakteryzowanie tego, ale podczas korzystania ze złożonych zapytań w CDataProviders miałem dziwne problemy z porzucaniem parametrów i pojawianiem się tego błędu.
Jednym z bardzo pomocnych sposobów rozwiązywania tych problemów w Yii jest włączenie rejestrowania parametrów
w twoim pliku konfiguracyjnym. Dodaj to do swojej db tablica w pliku konfiguracyjnym:
'enableParamLogging'=>true,
I upewnij się, że CWebLogRoute trasa jest ustawiona w Twoim log Sekcja. Spowoduje to wydrukowanie zapytania, które dało i błąd, oraz wszystkich parametrów, które próbowało powiązać. Bardzo pomocne!