SQLSTATE[HY093] : Compréhension et résolution de l'erreur « Numéro de paramètre non valide » dans SQL
Lorsque vous travaillez avec des bases de données, vous pouvez rencontrer une erreur message tel que « SQLSTATE[HY093] : numéro de paramètre non valide : le paramètre n'a pas été défini. » Cette erreur indique un problème dans la façon dont les paramètres sont liés à une instruction SQL.
Dans le contexte du modèle d'enregistrement actif de Yii et du DAO (Data Access Object), considérons un scénario spécifique dans lequel cette erreur se produit.
Supposons que vous ayez le code suivant :
$model_person = new TempPerson(); $model = $model_person->find('alias=:alias', array(':alias' => $_GET['alias'])); $connection = Yii::app()->db2; $sql = "INSERT INTO users (username, password, ssn, surname, firstname, email, city, country) VALUES(:alias, :password, :ssn, :surname, :firstname, :email, :city, :country)"; $command = $connection->createCommand($sql); $command->bindValue(":username", $model->alias); $command->bindValue(":password", substr($model->ssn, -4, 4)); $command->bindValue(":ssn", $model->ssn); $command->bindValue(":surname", $model->lastName); $command->bindValue(":firstname", $model->firstName); $command->bindValue(":email", $model->email); $command->bindValue(":city", $model->placeOfBirth); $command->bindValue(":country", $model->placeOfBirth); $command->execute();
Ce code tente d'insérer un enregistrement dans la table "utilisateurs" en fonction des attributs du Objet modèle $. Cependant, la requête générée et enregistrée dans le journal de l'application apparaît comme suit :
INSERT INTO users (username, password, ssn, surname, firstname, email, city, country) VALUES(:alias, :password, :ssn, :surname, :firstname, :email, :city, :country);
Comparez la requête ci-dessus avec les noms de paramètres dans les appels bindValue(). Notez que le nom du paramètre permettant de lier la valeur du nom d'utilisateur est ":username", et non ":alias" comme spécifié dans l'instruction SQL. Yii interprète cet écart comme « un paramètre court », conduisant à l'erreur « SQLSTATE[HY093] ».
Pour résoudre ce problème, assurez-vous que les noms de paramètres dans l'instruction SQL correspondent exactement à ceux utilisés dans bindValue. () méthode. Dans ce cas, remplacez le nom du paramètre dans l'instruction SQL par ":username."
Voici quelques causes courantes supplémentaires de l'erreur "SQLSTATE[HY093]" :
Pour résoudre efficacement ces problèmes, activez la journalisation des paramètres dans votre fichier de configuration Yii en ajoutant :
'enableParamLogging' => true,
à la base de données tableau. Cela fournira des informations détaillées sur la requête SQL et les paramètres liés, facilitant ainsi l'identification et la correction des erreurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!