Gestion des erreurs : "Numéro de paramètre non valide" dans une requête à insertion multiple
Lorsque vous essayez d'effectuer une requête à insertion multiple, il est crucial de vous assurer que le nombre de valeurs de paramètres correspond au nombre d'espaces réservés dans la requête elle-même. Cependant, le code suivant rencontre l'erreur « SQLSTATE[HY093] : numéro de paramètre non valide : le paramètre n'a pas été défini », malgré la confirmation que count($matches) et count($values) sont égaux juste avant l'exécution de la requête.
// BUILD VALUES $count = count($matches); for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash"); $q->execute($matches);
L'écart entre le code et le message d'erreur provient d'un problème potentiel lors de l'initialisation du tableau $values. Il est probable que $values contienne déjà des données, ce qui entraîne une incompatibilité de nombre. Pour éviter cela, il est essentiel de toujours initialiser les tableaux avant la boucle.
Pour résoudre le problème, considérez le code modifié suivant :
$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);
De plus, pour éviter le "Numéro de paramètre invalide" erreur dans plusieurs requêtes d'insertion, assurez-vous que la colonne utilisée pour les mises à jour de clés en double (dans ce cas, le hachage) a un index unique défini. Ne pas le faire peut entraîner un comportement inattendu et des erreurs potentielles.
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!