Jen pro poskytnutí odpovědi – protože tato chyba je docela běžná – zde je několik příčin:
1) :parameter
jméno omylem neodpovídá vazbě (překlep?). Tohle se tady stalo. Má :alias
v příkazu SQL, ale vázaný :username
. Takže když došlo k pokusu o vazbu param, Yii/PDO nemohl najít :username
v příkazu sql, což znamená, že byl "jeden parametr krátký" a vyvolal chybu.
2) Zcela zapomněli přidat bindValue()
pro parametr. To je snazší udělat v jiných konstrukcích Yii, jako je $critera
, kde máte pole nebo parametry ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
).
3) Zvláštní konflikty s stránkováním a/nebo řazením CDataProvider při použití together
a joins
. Neexistuje žádný konkrétní a snadný způsob, jak to charakterizovat, ale při použití složitých dotazů v CDataProviders jsem měl podivné problémy s vynecháním parametrů a výskytem této chyby.
Jedním z velmi užitečných způsobů, jak vyřešit tyto problémy v Yii, je povolit protokolování parametrů
ve vašem konfiguračním souboru. Přidejte to do vaší db
pole ve vašem konfiguračním souboru:
'enableParamLogging'=>true,
A ujistěte se, že CWebLogRoute
trasa je nastavena ve vašem log
sekce. Tím se vytiskne dotaz, který zadal a chyba, a všechny parametry, které se pokoušel svázat. Super užitečné!