Php mysqi bind_param变量数不';t匹配已准备语句中的参数数

Php mysqi bind_param变量数不';t匹配已准备语句中的参数数,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,这一定是新手犯的错误,但我没看到。以下是我的代码片段: $mysqli = mysqli_connect($dbCredentials['hostname'], $dbCredentials['username'], $dbCredentials['password'], $dbCredentials['database']); if ($mysqli->connect_error) { throw new exception( 'Connect Error

这一定是新手犯的错误,但我没看到。以下是我的代码片段:

$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

在本例中,year在数据库中的类型为int(10),我尝试传递一个已转换为int的副本,make是一个使用utf8\u unicode\u ci编码的varchar(20)。我遗漏了什么吗?

你准备的陈述是错误的,应该是:

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

是单引号造成的吗?必须是值,而不是标记。它已经是一个字符串,因为您正在使用
bind_-param('is'

在bind_-param方法中使用它做了什么?它是$types字符串。“is”应该表示第一个参数是整数,第二个是字符串。