Maison >base de données >tutoriel mysql >Pourquoi ma requête INSERT en plusieurs parties échoue-t-elle et comment puis-je y remédier ?

Pourquoi ma requête INSERT en plusieurs parties échoue-t-elle et comment puis-je y remédier ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 07:36:28972parcourir

Why Does My Multi-Part INSERT Query Fail, and How Can I Fix It?

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

Déclaration:
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