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

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