Maison > base de données > tutoriel mysql > Pourquoi mon instruction préparée PDO échoue-t-elle avec « SQLSTATE[HY093] : numéro de paramètre invalide » lors de l'insertion de plusieurs enregistrements ?

Pourquoi mon instruction préparée PDO échoue-t-elle avec « SQLSTATE[HY093] : numéro de paramètre invalide » lors de l'insertion de plusieurs enregistrements ?

Mary-Kate Olsen
Libérer: 2024-12-13 00:06:16
original
432 Les gens l'ont consulté

Why Does My PDO Prepared Statement Fail with

Dépannage d'une erreur SQL lors de l'insertion de plusieurs enregistrements

Dans un effort de développement récent, un extrait de code conçu pour insérer plusieurs enregistrements dans une base de données à l'aide d'un La déclaration préparée par PDO a rencontré une erreur :

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
Copier après la connexion

Malgré l'apparente équivalence dans le nombre de valeurs à insérer (count($matches)) et le nombre d'espaces réservés (count($values)), l'exécution de la requête a échoué.

Cause première

L'erreur provenait d'un idée fausse sur l'initialisation du tableau $values. Contrairement à $matches, qui contenait initialement un tableau vide, $values ​​était renseigné avec des valeurs non initialisées. Par conséquent, $values ​​contenait un nombre supérieur à $matches, ce qui entraînait une erreur de non-concordance des paramètres.

Résolution

Pour résoudre ce problème, il est crucial de explicitement initialisez $values ​​sous forme de tableau vide avant d'entrer dans la boucle :

$matches = array('1');
$count = count($matches);
$values = [];
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}
Copier après la connexion

Avec cette modification, les nombres de $matches et $values ​​correspondront, permettant la requête à exécuter avec succès.

Considérations supplémentaires

De plus, il est conseillé de s'assurer que la colonne de hachage dans la table cible a un index unique pour gérer la clé en double conflits. Ceci peut être réalisé en ajoutant la ligne suivante après l'instruction INSERT :

ON DUPLICATE KEY UPDATE hash=values(hash)
Copier après la connexion

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