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. Я что-то пропустил?
Ответы
Ответ 1
Ваше подготовленное выражение неверно, оно должно быть:
$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types WHERE year = ? AND make = ? ORDER by model");
Одиночные кавычки сделали это? значение не маркер. Это уже будет строка, потому что вы выполняете как таковую с помощью bind_param('is'