bind_param变量数与预准备语句中的参数数不匹配

2022-08-30 12:55:31

下面是我的代码中的一个片段:

$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的值时,我看到了值,但是当我运行此脚本时,我得到一个 null 值,并且我的日志文件中出现以下警告:

PHP 警告: mysqli_stmt::bind_param(): 变量数与预准备语句中的参数数不匹配

在这种情况下,year 在数据库中以 int(10) 类型存在,我尝试传递一个已转换为 int 的副本,并且 make 是一个具有 utf8_unicode_ci 编码的 varchar(20)。我错过了什么吗?


答案 1

您准备的语句是错误的,它应该是:

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

准备语句时,必须将每个变量替换为不带引号的问号。引号内的问号不会被识别为占位符。

问号的数量必须等于bind_param()


答案 2

推荐