Juste pour fournir une réponse - parce que cette erreur est assez courante - voici quelques causes :
1) Le :parameter
le nom ne correspond pas à la liaison par erreur (faute de frappe ?). C'est ce qui s'est passé ici. Il a :alias
dans l'instruction SQL, mais lié :username
. Ainsi, lorsque la liaison param a été tentée, Yii/PDO n'a pas pu trouver :username
dans l'instruction sql, ce qui signifie qu'il s'agissait de "un paramètre court" et a renvoyé une erreur.
2) Oublier complètement d'ajouter le bindValue()
pour un paramètre. C'est plus facile à faire dans Yii d'autres constructions comme $critera
, où vous avez un tableau ou des paramètres ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
).
3) Conflits étranges avec la pagination et/ou le tri de CDataProvider lors de l'utilisation de together
et joins
. Il n'y a pas de moyen spécifique et simple de caractériser cela, mais lors de l'utilisation de requêtes complexes dans CDataProviders, j'ai eu des problèmes étranges avec la suppression de paramètres et cette erreur.
Un moyen très utile de résoudre ces problèmes dans Yii consiste à activer la journalisation des paramètres
dans votre fichier de configuration. Ajoutez ceci à votre db
tableau dans votre fichier de configuration :
'enableParamLogging'=>true,
Et assurez-vous que le CWebLogRoute
la route est configurée dans votre log
section. Cela imprimera la requête qui a donné une erreur, ainsi que tous les paramètres qu'elle tentait de lier. Super utile !