动态地将数组转换为变量并将它们用作函数参数

时间:2015-09-01 13:31:49

标签: php mysql

我需要在数据处理期间进行大量的mysql查询。由于实际代码几乎没有变化,我想用函数封装它。这样的功能可以如下:

// input: sql statement, binding parameters and paramter types
private prepared_statement($query, $params, $param_string) {

        // I use this peace of code over and over again

        $stmt = $this->db->prepare($query);
        if (!$stmt) {//TODO log
            echo "Error in prepared statement";
        }

        // problem
        $stmt->bind_param($param_string, $param1, $param2, ...);
        $stmt->execute();

        // problem
        $stmt->bind_result($);
        $stmt->fetch();
        $stmt->close(); 
        //...  
    }

第二个函数参数是一个数组,其中包含要进行查询的所有绑定参数。我不知道如何将它们传递给bind_param函数,因为它只接受绑定参数作为单个变量。

是否可以动态地将param数组转换为可以传递给bind_param的变量?

此外,我想知道如何最好地绑定结果,因为我不知道将返回多少结果。实际上它与上面的问题相同。

3 个答案:

答案 0 :(得分:1)

如果您有这样的数组:

$array = Array("name"=>"Jhon","surname"=>"Conor");

你可以这样做:

extract($array);

然后像这样使用:

echo "Your name is " . $name . " and your surname is " . $surname;

答案 1 :(得分:1)

在Jon使用call_user_func_array的提案的帮助下,我设法获得了以下解决方案:

private function prepared_statement($query, $params, $param_string) {

        $fetched_data = array();
        $binding_params[] = & $param_string;

        foreach($params as &$current_param) {
            $binding_params[] = & $current_param;
        }

        $stmt = $this->db->prepare($query);
        if (!$stmt) {
            //TODO log
            echo "Error in prepared statement";
        }

        call_user_func_array(array($stmt, "bind_param"), $binding_params);
        $stmt->execute();   
        $result = $stmt->get_result();
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
            foreach($row as $r) 
                array_push($fetched_data, $r);

        }

        $stmt->close(); 
        return $fetched_data;
    }

答案 2 :(得分:0)

您可以使用' $'两次得到变量:

foreach($my_arr AS $k => $v){
    $$k = $v;
}