Maison >développement back-end >tutoriel php >Pourquoi est-ce que j'obtiens « SQLSTATE[HY093] : numéro de paramètre invalide » dans ma requête INSERT multiple préparée ?

Pourquoi est-ce que j'obtiens « SQLSTATE[HY093] : numéro de paramètre invalide » dans ma requête INSERT multiple préparée ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-09 00:25:10934parcourir

Why Am I Getting

Erreur lors de la résolution de « SQLSTATE[HY093] : numéro de paramètre non valide » dans la requête à insertion multiple préparée

Lors de la tentative d'exécution d'une requête à insertion multiple, une erreur indiquant « SQLSTATE[HY093] : numéro de paramètre non valide : le paramètre n'a pas été défini » peut se produire. Malgré le nombre de correspondances pour le tableau de paramètres et les éléments de données d'entrée, cette erreur persiste.

Comprendre l'erreur

Cette erreur survient en raison d'une inadéquation entre le nombre de éléments du tableau de paramètres ($values) et les données d'entrée ($matches). Lors de l'exécution d'une instruction préparée, la requête attend un nombre spécifique de paramètres et toute divergence entraînera cette erreur.

Résolution du problème

Pour résoudre ce problème, assurez-vous que $values ​​est initialisé avant d'entrer dans la boucle qui génère les paramètres. Cela empêche toute valeur préexistante d’affecter le décompte. De plus, vérifier l'existence d'un index unique sur la colonne « hash » dans la base de données permettra d'éviter davantage les conflits potentiels.

Code révisé

Voici le code révisé, intégrant ces révisions :

$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