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

Posted

技术标签:

【中文标题】call_user_func_array() - 警告:mysqli_stmt::bind_param():变量数与准备语句中的参数数不匹配【英文标题】:call_user_func_array() - Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement 【发布时间】:2016-10-08 00:36:08 【问题描述】:

我正在尝试使用数组动态绑定参数。这是我的代码中很重要的部分,也显示了调试信息:

$params = array_merge( array( $one ), array_values( $two ) );
echo '<pre>';
echo $query . '<br><br>';
print_r( $params );
call_user_func_array( array( &$stmt, 'bind_param' ), MakeValuesReferenced( $params ) );

这是调试信息:

如您所见,我的查询中有三个问号,并且在 bind_param 中添加了三个参数。我认为这应该有效。我做错了什么?

【问题讨论】:

【参考方案1】:

您不能引用占位符,这使它成为文字值而不是占位符。将时间移到绑定中,让占位符自行保留。

例如

where thedateandtime between ? and ?

然后在绑定中

($date . ' 00:00:00')

您也不能绑定列,因此应该更改order by。在将值传递到查询之前,使用白名单比较值。

【讨论】:

以上是关于call_user_func_array() - 警告:mysqli_stmt::bind_param():变量数与准备语句中的参数数不匹配的主要内容,如果未能解决你的问题,请参考以下文章

call_user_func和call_user_func_array函数

php call_user_func_array用于函数

php call_user_func_array用于类

call_user_func_array

php中call_user_func 与 call_user_func_array的使用

php call_user_func_array用于具有命名空间的类