dousa1630 2015-06-19 02:21
浏览 6
已采纳

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

I'm just getting over using the singleton approach and am starting to get into prepared statements... I'm racking my brain on why one version of this works and one does not when, to me, they seem to be the same thing... I really want it to work the second way in order to meet my end goal.

This works:

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

This does not:

$params = array("i", 2);
call_user_func_array(array($stmt, 'bind_param'), $params);
  • 写回答

1条回答 默认 最新

  • doulaozhang0238 2015-06-19 03:13
    关注

    You are probably getting an error message like

    mysqli_stmt::bind_param() expected to be a reference, value given in...

    The problem is that bind_param() in PHP 5.3+ requires array values as reference while 5.2 works with real values.

    From the docs:

    Care must be taken when using mysqli_stmt_bind_param() in conjunction with call_user_func_array(). Note that mysqli_stmt_bind_param() requires parameters to be passed by reference, whereas call_user_func_array() can accept as a parameter a list of variables that can represent references or values (ref).


    One solution is to create an array of references

    $params = array("i", 2);
    $tmp = array();
    foreach($params as $key => $value) {
        $tmp[$key] = &$params[$key];
    }
    call_user_func_array(array($stmt, 'bind_param'), $tmp); 
    

    and another similar solution is

    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));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答