Maison > base de données > tutoriel mysql > Pourquoi ma requête à insertion multiple renvoie-t-elle une erreur « Numéro de paramètre non valide » malgré le nombre de paramètres correspondant ?

Pourquoi ma requête à insertion multiple renvoie-t-elle une erreur « Numéro de paramètre non valide » malgré le nombre de paramètres correspondant ?

Barbara Streisand
Libérer: 2024-12-28 01:46:09
original
157 Les gens l'ont consulté

Why Does My Multiple Insert Query Throw an

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);
Copier après la connexion

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);
Copier après la connexion

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!

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