web-dev-qa-db-fra.com

Php mysqli bind_param Le nombre de variables ne correspond pas au nombre de paramètres dans l'instruction préparée

Ce doit être une erreur de débutant, mais je ne le vois pas. Voici un extrait de mon code:

$mysqli = mysqli_connect($dbCredentials['hostname'], 
    $dbCredentials['username'], $dbCredentials['password'], 
    $dbCredentials['database']);

if ($mysqli->connect_error) {
    throw new exception( 'Connect Error (' . $mysqli->connect_errno . ') '
    . $mysqli->connect_error);
}

$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 je fais écho aux valeurs de $ year et $ make, je vois des valeurs, mais lorsque j'exécute ce script, j'obtiens une valeur nulle et l'avertissement suivant apparaît dans mon fichier journal:

PHP Warning:  mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement

Dans ce cas, l'année est dans la base de données de type int (10), et j'ai essayé de passer une copie qui avait été castée en int, et make est un varchar (20) avec l'encodage utf8_unicode_ci. Suis-je en train de manquer quelque chose?

29
TMorgan

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

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

Les citations simples ont fait ça? être la valeur et non un marqueur. Ce sera déjà une chaîne car vous effectuez un cast en tant que tel avec bind_param('is'

44
runspired