以下是bind_param PHP的方法有什么区别

时间:2015-06-19 02:21:38

标签: php prepared-statement

我刚刚开始使用单身方法,并开始准备好陈述...我正在绞尽脑汁为什么这个版本的一个版本有效,一个版本不适用于我,他们似乎是同样的事情......我真的希望它以第二种方式工作,以实现我的最终目标。

这有效:

call_user_func_array(array($stmt, 'bind_param'), array("i", 2));

这不是:

$params = array("i", 2);
call_user_func_array(array($stmt, 'bind_param'), $params);

1 个答案:

答案 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));