duanjumie8753 2014-01-02 15:37
浏览 59
已采纳

使用call_user_func_array调用bind_param mysqli prepared statement [duplicate]

This question already has an answer here:

I have a function that can take any number of parameters like below:

public function executePreparedStatement($query, $paramString = ''){
    $stmt = $this->db->prepare($query);
    if (func_num_args() > 2){
        $parameters = func_get_args();
        array_shift($parameters); // Get rid of the query
        $parameters = array('s', 'email@email.com');  //Hard code for test
        call_user_func_array(array($stmt, "bind_param"), $parameters);
        // $stmt->bind_param($parameters[0], $parameters[1]); //Hard code for test
    }
    $stmt->execute();
    $this->result = $stmt->get_result();
    $stmt->close();
}

The problem is when I run the code as is, The stmt object displays:

No data supplied for parameters in prepared statement

But when I comment out the call_user_func_array call and uncomment the subsequent line, the query works.

</div>
  • 写回答

1条回答 默认 最新

  • dongse7261 2014-01-02 16:26
    关注

    @Bill_Karwin commented this is a duplicate. I found the solution in that answer. Below is my function (I had to make the values of the parameters be references):

    public function executePreparedStatement($query, $paramString = ''){
        $stmt = $this->db->prepare($query);
        if (func_num_args() > 2){
            $parameters = func_get_args();
            array_shift($parameters); // remove the query from the list
            // Array needs to be bound by reference
            foreach ($parameters as $key=>&$value) {
                $parameters[$key] = &$value;
            }
            call_user_func_array(array($stmt, "bind_param"), $parameters);
        }
        $stmt->execute();
        $this->result = $stmt->get_result();
        $stmt->close();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料