Mysql
 sql >> Base de données >  >> RDS >> Mysql

Numéro de paramètre invalide :le paramètre n'a pas été défini Insertion de données

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 !