Подтвердить что ты не робот

Php mysqi bind_param Число переменных не соответствует количеству параметров в подготовленном операторе

Это должно быть ошибкой новичка, но я этого не вижу. Вот фрагмент моего кода:

$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();

Когда я повторяю значения для $year и $make, я вижу значения, но когда я запускаю этот script, я получаю нулевое значение, и в моем файле журнала появляется следующее предупреждение:

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

В этом случае год находится в базе данных типа int (10), и я попытался передать копию, которая была отлита как int, а make - varchar (20) с кодировкой utf8_unicode_ci. Я что-то пропустил?

4b9b3361

Ответ 1

Ваше подготовленное выражение неверно, оно должно быть:

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

Одиночные кавычки сделали это? значение не маркер. Это уже будет строка, потому что вы выполняете как таковую с помощью bind_param('is'