Erreur inattendue dans une requête à insertion multiple
L'extrait de code tente de préparer et d'exécuter une requête SQL pour insérer plusieurs valeurs dans une table. Cependant, l'exécution échoue avec l'erreur "SQLSTATE[HY093] : Numéro de paramètre invalide : le paramètre n'a pas été défini."
Cause de l'erreur
L'erreur se produit car le nombre d'éléments dans le tableau $values ne correspond pas au nombre d'éléments dans le tableau $matches. La requête SQL attend un nombre spécifique de paramètres, mais le code PHP fournit des nombres différents.
Solution
Pour résoudre l'erreur, assurez-vous que les valeurs $ et $ les tableaux de correspondances contiennent le même nombre d’éléments. Ceci peut être réalisé en initialisant le tableau $values avant la boucle.
De plus, il est recommandé de vérifier si la colonne de hachage a un index unique. Si ce n'est pas le cas, la clause ON DUPLICATE KEY UPDATE risque de ne pas fonctionner comme prévu.
Code révisé
$matches = array('1'); $count = count($matches); $values = []; for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $sql = "INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash=values(hash)"; $stmt = $dbh->prepare($sql); $data = $stmt->execute($matches);
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!