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
Libérer: 2024-12-25 07:36:28
original
965 Les gens l'ont consulté

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
Copier après la connexion

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);
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