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