Maison > base de données > tutoriel mysql > Pourquoi ma requête à insertion multiple renvoie-t-elle un « numéro de paramètre invalide » ?

Pourquoi ma requête à insertion multiple renvoie-t-elle un « numéro de paramètre invalide » ?

Susan Sarandon
Libérer: 2024-12-13 18:14:10
original
261 Les gens l'ont consulté

Why Does My Multiple Insert Query Return

Erreur : numéro de paramètre non valide dans une requête à insertion multiple

Lorsque vous essayez d'insérer plusieurs enregistrements dans une table de base de données, vous pouvez rencontrer le "Numéro de paramètre non valide : le paramètre n'a pas été défini" erreur. Cela se produit lorsque le nombre de paramètres spécifiés dans la requête ne correspond pas au nombre de valeurs fournies en entrée.

Comprendre le problème

Dans l'extrait de code fourni :

$matches = array('1');
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}

// Build query
$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

Le but est d'insérer la valeur de $matches dans la table de hachage, à l'aide d'une instruction préparée. Cependant, l'erreur se produit car le nombre de paramètres d'espace réservé (?) dans le tableau $values ​​ne correspond pas aux données réelles dans $matches.

Correction

Pour résoudre ce problème, assurez-vous que le suivant :

  1. Initialiser les tableaux : Initialisez toujours le tableau $values ​​avant la boucle pour éviter les préexistants valeurs.
  2. Confirmez le nombre de données : Vérifiez que le nombre d'éléments dans $values ​​est égal au nombre d'éléments dans $matches. Sinon, ajustez la boucle ou ajoutez des vérifications conditionnelles.
  3. Créez un index unique : Vérifiez si la colonne de hachage a un index unique. Cela évite les entrées en double et garantit que chaque valeur fournie est insérée ou mise à jour.
  4. Utiliser l'instruction paramétrée : Utilisez une instruction préparée pour éviter les problèmes d'injection SQL et de liaison de paramètres.

Exemple

$matches = array('1');
$values = [];
$count = count($matches);

for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}

// Insert query with named parameters (:hash)
$sql = "INSERT INTO hashes (hash) VALUES (:hash) ON DUPLICATE KEY UPDATE hash = VALUES(:hash)";
$stmt = $dbh->prepare($sql);
$data = $stmt->execute([':hash' => $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