在MYSQLI中动态绑定参数的正确方法

时间:2013-09-12 18:00:14

标签: php mysqli prepared-statement

我正在为OOP编写mysqli数据库类。我希望所有查询都准备好,但是我很难动态地将参数绑定到查询。 我希望查询方法API看起来像这样

query($sql, $param)

但是,我不知道如何在方法中动态绑定参数。我在PHP手册中搜索了示例,并查看了以下代码:

$method = new ReflectionMethod('mysqli_stmt', 'bind_param'); 
$method->invokeArgs($stmt, $params);    
$stmt->execute(); 

我知道ReflectionMethod()将执行对象或类的方法,但我不明白它在这种情况下是如何工作的,考虑到每个参数都有一个type,应该指定binding

如何动态绑定参数?

其次,ReflectionMethod()在这种情况下如何运作?

1 个答案:

答案 0 :(得分:0)

我总是使用我编写的这个自定义函数来处理mysqli,它对我有用。

public function execute_prepared_query_reflection ($array_list)
    {
        $ret_stmt = mysqli_prepare($this->conn, $this->sql);    
        //call_user_func_array('mysqli_stmt_bind_param', array_merge (array($this->statement, $param_listtypes), $param_list));
        //$this->statement->bind_param("issdssssss", $param_staffid, $param_duration, $param_dateappraised, $param_totalmark, $param_detailBySuperv, $param_sumByHead, $param_recommendation, $param_enteredby);
        if ($ret_stmt!=false)
        {
            $method    = new ReflectionMethod('mysqli_stmt', 'bind_param');
            $method->invokeArgs($ret_stmt, $this->createArrayRef($array_list));               
            $retvar = $ret_stmt->execute();  
        } 
        $method = null;
        $ret_stmt = null;

    }