如何将mysqli :: bind_param与数组一起用作第二个参数

时间:2018-06-02 04:05:43

标签: php arrays mysqli prepared-statement bindparam

此查询应该将新用户插入“用户”表

$user = DB::getInstance()->insert('users', array(
        'username' => 'jim',
        'password' => 'pass',
        'salt' => 'salt'
       )
);

对应的insert()

public function insert($table, $fields = array())
{
    if (count($fields)) {
        $keys   = array_keys($fields);
        $values = null;
        $x      = 1;
        foreach ($fields as $field) {
            $values .= "?";
            if ($x < count($fields)) {
                $values .= ', ';
            }
            $x++;
        }
        $sql = "INSERT INTO users (`" . implode('`,`', $keys) . "`) VALUES ({$values})";
        echo $sql;
        if($this->queryDB($sql,$fields)){
            echo "its good";
            return true;
        }else{
            echo "bad query";
        }
    }
    return false;
}

尝试绑定查询值数组($ param)作为bind_param函数的第二个参数

    $stmt = $this->mysqli->prepare($pattern);
    $stmt->bind_param("sss", $param);
    $stmt->execute();

此代码不断返回“mysqli_stmt :: bind_param():类型定义字符串中的元素数与绑定变量数不匹配”错误。

我也尝试过call_user_func_array,但一直都会遇到同样的错误。我做错了什么?

2 个答案:

答案 0 :(得分:3)

从PHP 5.6开始,您可以使用splat运算符...

$stmt->bind_param("sss", ...$param);

答案 1 :(得分:0)

如果无法使splat运算符起作用,则可能必须将PHP版本更新为至少PHP 5.6,以便传递这样的数组:

bind_param("sss", ...$array); 

使用以下命令检查您在Linux上的版本:

php --version

我将Centos 7上的我的版本更新为PHP 7.2,这解决了我的问题。