Maison  >  Questions et réponses  >  le corps du texte

Le nombre de paramètres dans l'instruction préparée n'est pas cohérent avec le nombre de variables liées par bind_param

<p>Voici mon extrait de code : </p> <pre class="brush:php;toolbar:false;">$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types OÙ année = ? ET marque = '?' COMMANDER par modèle"); $stmt->bind_param('est', $année, $make); $stmt->execute();</pre> <p>Lorsque je génère les valeurs de $year et $make, je peux voir les valeurs, mais lorsque j'exécute ce script, j'obtiens une valeur nulle et l'avertissement suivant apparaît dans mon fichier journal : </ p> ; <blockquote> <p>Avertissement PHP : mysqli_stmt::bind_param() : le nombre de variables ne correspond pas au nombre de paramètres dans l'instruction préparée</p> </blockquote> <p>Dans ce cas, le type d'année dans la base de données est int(10), j'ai essayé de le convertir en type int pour le passage, et make est un varchar(20) avec l'encodage utf8_unicode_ci. Y a-t-il quelque chose qui me manque ? </p>
P粉578343994P粉578343994396 Il y a quelques jours403

répondre à tous(1)je répondrai

  • P粉513316221

    P粉5133162212023-08-23 14:52:19

    Votre déclaration préparée est fausse, elle devrait être :

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

    Lorsque vous préparez une déclaration, vous devez remplacer chaque variable par un point d'interrogation au lieu de guillemets. Les points d'interrogation entre guillemets ne seront pas reconnus comme des espaces réservés.

    Le nombre de points d'interrogation doit être égal au nombre de variables dans bind_param()

    répondre
    0
  • Annulerrépondre