Maison  >  Article  >  développement back-end  >  Comment résoudre le problème « Le nombre de variables ne correspond pas au nombre de paramètres » dans mysqli_bind_param() ?

Comment résoudre le problème « Le nombre de variables ne correspond pas au nombre de paramètres » dans mysqli_bind_param() ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-22 12:46:02468parcourir

How to Troubleshoot

Comprendre l'erreur « Le nombre de variables ne correspond pas au nombre de paramètres » dans mysqli_bind_param()

Lors de l'utilisation d'instructions préparées avec mysqli de MySQL extension, il est crucial de s'assurer que la liaison des paramètres s'aligne sur la syntaxe de requête préparée. Ne pas le faire peut entraîner une erreur du type « Le nombre de variables ne correspond pas au nombre de paramètres dans l'instruction préparée. »

Approfondissons l'extrait de code fourni pour identifier le problème :

$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types 
    WHERE year = ? AND make = '?' ORDER by model");

$stmt->bind_param('is', $year, $make);

$stmt->execute();

L'erreur se produit car l'instruction préparée contient un espace réservé pour la valeur make entre guillemets : "?'". Dans une instruction préparée, les points d'interrogation sont utilisés comme espaces réservés pour les valeurs qui seront liées ultérieurement. Cependant, lorsqu'ils sont placés entre guillemets, ils sont traités comme du texte littéral plutôt que comme des espaces réservés.

Correction de la déclaration préparée

Pour résoudre le problème, supprimez les guillemets entourant le ? espace réservé pour make dans la déclaration préparée :

$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types 
    WHERE year = ? AND make = ? ORDER by model");

$stmt->bind_param('is', $year, $make);

$stmt->execute();

Maintenant, la déclaration préparée en a un ? espace réservé pour chaque variable, année et marque.

Points clés à retenir

  • Dans une déclaration préparée, les points d'interrogation sont des espaces réservés pour les valeurs.
  • Ne mettez pas les espaces réservés entre guillemets.
  • Le nombre d'espaces réservés dans l'instruction préparée doit correspondre au nombre de variables que vous liez à l'aide de bind_param().

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