Maison > développement back-end > tutoriel php > Pourquoi est-ce que j'obtiens l'erreur SQLSTATE[HY093] « Numéro de paramètre invalide » dans Yii et comment puis-je la corriger ?

Pourquoi est-ce que j'obtiens l'erreur SQLSTATE[HY093] « Numéro de paramètre invalide » dans Yii et comment puis-je la corriger ?

Susan Sarandon
Libérer: 2024-12-25 20:48:11
original
159 Les gens l'ont consulté

Why Am I Getting the SQLSTATE[HY093]

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();
Copier après la connexion

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);
Copier après la connexion

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]" :

  • Oubli pour ajouter un bindValue() pour un paramètre spécifié.
  • Caractères invalides dans le nom de l'espace réservé.
  • Conflits entre la pagination et le tri de CDataProvider lors de l'utilisation de jointures dans des requêtes complexes.

Pour résoudre efficacement ces problèmes, activez la journalisation des paramètres dans votre fichier de configuration Yii en ajoutant :

'enableParamLogging' => true,
Copier après la connexion

à 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal