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!