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