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() 出错?

Linux系统安装LAMP中的MysQy 和PHP

mysqli_stmt::bind_param():变量的数量与准备好的语句中的参数数量不匹配

我的 php/mysqli 中出现错误和警告 [重复]

php,mysqli-stmt.bind-param]:类型定义字符串中的元素数与绑定变量数不匹配