PHP使用(... $ array)将数组作为函数的参数传递

时间:2016-10-05 17:31:03

标签: php arrays parameters sqlbindparameter bindparam

我尝试将数组作为函数的参数传递,并且遇到了一些麻烦。 这是函数。

$stmt->bind_param();

我正在研究这个并发现你可以使用它:

$stmt->bind_param(...$values);

这在我的开发服务器(PHP 7.0.0)上运行良好,但当我将其输入到另一台服务器(PHP 5. *)时,我收到以下错误:

语法错误,意外情况'。',期待')'

经过进一步研究,我尝试了:

call_user_func_array(array($stmt, 'bind_param'), $values);

并收到此错误:

call_user_func_array()期望参数1是有效的回调,第一个数组成员不是有效的类名或对象

*作为旁注,我知道我可以输入参数,一切都会很好,但是我需要函数来获取任意数量的参数(这就是导致函数思想的原因)。

这里的功能是:

function updateId($id, $data){

    $mysqli = dbConnect::connect();

    $sm=array();
    $values=array();
    $dataString = array();

    foreach($data as $column=>$value){
        $dataString[] = ($column .'= ?');
        $values[] = $value;
        if(gettype($value)==="string"){
            $sm[] = 's';
        }elseif(gettype($value)==="integer"){
            $sm[] = 'i';
        }elseif(gettype($value)==="double"){
            $sm[] = 'd';
        }else{
            $sm[] = 'b';
        }
    }

    $dataString = implode(', ',$dataString);
    $sm = implode('',$sm);

    $prepString = "UPDATE $this->tablename SET $dataString WHERE id=$id";

    array_unshift($values, $sm);

    $stmt = $mysqli->prepare($prepString);
    $stmt->bind_param(...$values);
    $stmt->execute() or die($stmt->error);
    $stmt->close();
    $mysqli->close();

}

1 个答案:

答案 0 :(得分:1)

您收到错误是因为您将非参考值传递给bind_param。您可以使用call_user_func_array,但必须确保传递的值是引用。这可以实现如下:

改变这个:

$values[] = $value;

到此:

$values[] = &$data[$column];

而且(就像你已经做过的那样)改变了这个:

$stmt->bind_param(...$values);

进入这个:

call_user_func_array(array($stmt, 'bind_param'), $values);