我刚刚开始使用单身方法,并开始准备好陈述...我正在绞尽脑汁为什么这个版本的一个版本有效,一个版本不适用于我,他们似乎是同样的事情......我真的希望它以第二种方式工作,以实现我的最终目标。
这有效:
call_user_func_array(array($stmt, 'bind_param'), array("i", 2));
这不是:
$params = array("i", 2);
call_user_func_array(array($stmt, 'bind_param'), $params);
答案 0 :(得分:2)
您可能收到类似
的错误消息mysqli_stmt :: bind_param()应该是一个参考,在...中给出的值
问题是PHP 5.3+中的bind_param()
需要数组值作为参考,而5.2使用实际值。
来自docs:
将 mysqli_stmt_bind_param()与 call_user_func_array()结合使用时必须小心。请注意, mysqli_stmt_bind_param()需要通过引用传递参数,而 call_user_func_array()可以接受可以表示引用或值的变量列表作为参数({{3 }})。
一种解决方案是创建一个引用数组
$params = array("i", 2);
$tmp = array();
foreach($params as $key => $value) {
$tmp[$key] = &$params[$key];
}
call_user_func_array(array($stmt, 'bind_param'), $tmp);
和另一个类似的ref是
function refValues($arr){
if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+
{
$refs = array();
foreach($arr as $key => $value)
$refs[$key] = &$arr[$key];
return $refs;
}
return $arr;
}
$params = array("i", 2);
call_user_func_array(array($stmt, 'bind_param'), refValues($params));