将数组值分隔为多个参数

时间:2014-04-15 02:58:01

标签: php arrays function arguments sanitization

我有一个我在自定义数据库类中创建的函数。该函数旨在采用参数化SQL,清理输入并执行它。

我遇到的唯一问题是最后一条未注释的行。我有一个类型数组的变量,但我需要将数组中的每个值作为单独的参数传递。我该怎么做呢?

function do_query($sql, $values){
    if(!isset($this->connect_error)){
        if(tg_debug == true){
            print "Query Executing! <br />";
        }
        $num_vals = count($values);
        $i = 0;
        $type = "";
        while($i < $num_vals){
            if(is_int($values[$i]) == true)
                $type .= "i";
            elseif(is_string($values[$i]) == true)
                $type .= "s";
            $i++;
        }
        $i = 0;
        while($i < $num_vals){
            // security stuff goes here...
            $values[$i] = $this->escape_string($values[$i]);
            $i++;
        }

        $expr = $this->prepare($sql);
        print_r($values);
        // $values is still an array, extract values and convert to a seperate argument
        $expr->bind_param($type, $value);
        //$expr->execute();

    }
}

示例查询:$class->do_query("INSERT INTO(id, value) VALUES (?, ?)", array(3, "This is a test"));

2 个答案:

答案 0 :(得分:1)

使用ReflectionMethod class

...
$bindParamReflection = new \ReflectionMethod($expr, 'bind_param');
$args = $values;
array_unshift($args, $type);
$bindParamReflection->invokeArgs($expr, $args);
...

答案 1 :(得分:1)

您可以使用call_user_func_array()

$args = $values;
array_unshift($args, $type);
call_user_func_array(array($expr, 'bind_param'), $args);

splat operator被添加到语言中时,这将大大简化,这应该发生在5.6中:

$exp->bind_param($type, ...$values);