Échec de l'exécution d'une requête d'insertion multiple : cause et solution
L'exécution d'une requête d'insertion en plusieurs parties peut entraîner le message d'erreur suivant fail :
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
si count($matches) correspondra à count($values), cette erreur pourrait se produire.
La cause de cette erreur est que le nombre de Les éléments dans $values ne correspondent pas au nombre d'éléments dans $matches. Si $values et $matches ne contiennent pas le même nombre d'éléments, la demande d'insertion échoue car la requête attend X paramètres mais n'obtient que Y éléments de données ($matches). Dans ce cas, $values contient très probablement déjà des valeurs. C'est pourquoi les nombres d'éléments ne correspondent pas.
Pour éviter ce problème, un tableau doit toujours être initialisé avant la boucle.
De plus, il faut s'assurer que la colonne " hash " contient un index unique.
Voici un exemple de structure de code corrigée :
$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!