php mysqi bind_param 变量数与准备好的语句中的参数数不匹配[重复]
Posted
技术标签:
【中文标题】php mysqi bind_param 变量数与准备好的语句中的参数数不匹配[重复]【英文标题】:Php mysqi bind_param Number of variables doesn't match number of parameters in prepared statement [duplicate] 【发布时间】:2013-01-24 17:16:08 【问题描述】:这一定是新手的错误,但我没有看到。这是我的代码中的一个 sn-p:
$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 是一个使用 utf8_unicode_ci 编码的 varchar(20)。我错过了什么吗?
【问题讨论】:
您尝试在 bind_param 方法中使用该 is 做什么? 它是 $types 字符串。 “is”应该表示第一个参数是整数,第二个参数是字符串。 【参考方案1】:你准备的陈述是错误的,应该是:
$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types WHERE year = ? AND make = ? ORDER by model");
单引号造成的?是值而不是标记。它已经是一个字符串,因为您正在使用bind_param('is'
进行投射
【讨论】:
以上是关于php mysqi bind_param 变量数与准备好的语句中的参数数不匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章
call_user_func_array() - 警告:mysqli_stmt::bind_param():变量数与准备语句中的参数数不匹配
为啥在查询中设置 group_concat_max_len 变量会导致 PHP 的 bind_param() 出错?