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
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[] = '(?)'; }
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)
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!