Maison > développement back-end > tutoriel php > Pourquoi ma requête SQL INSERT multiple échoue-t-elle avec « SQLSTATE[HY093] : numéro de paramètre invalide » ?

Pourquoi ma requête SQL INSERT multiple échoue-t-elle avec « SQLSTATE[HY093] : numéro de paramètre invalide » ?

Barbara Streisand
Libérer: 2024-12-06 10:13:12
original
529 Les gens l'ont consulté

Why Does My Multiple SQL INSERT Query Fail with

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

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