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

报告相同问题?

悬赏问题

  • ¥15 Matlab在app上输入带有矩阵形式的初始条件发生错误
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 用ADS设计一款的射频功率放大器