将参数与参数数组绑定

2022-08-30 19:45:27

我有一个函数可以做到这一点:

function registerUser($firstName, $lastName, $address, $postcode, $email, $password)
{
    $params = array($firstName, $lastName, $address, $postcode, $email, $password);
    $result = $this->db->bind("INSERT INTO Users VALUES (?, ?, ?, ?, ?, ?)", 'ssssss', $params);
}

它发送到我的数据库类,它执行以下操作:

public function bind($query, $type, $params)
{
    $this->query = $query;
    $stmt = $this->mysqli->prepare($this->query);
    $stmt->bind_param($type, $param);
    $stmt->execute;
}

问题是这不起作用。

我希望做的是获取列表并让它将它们列在 之后,以便查询类似于:$params$type

$stmt->bind_param('ssssss', $firstName, $lastName, $address, $postcode, $email, $password);

但显然我走错了路。

有没有办法使数组...转换成一个列表,以便在查询阶段打印出来?bind_param


答案 1

call_user_func_array“使用参数数组调用回调”

call_user_func_array(array($stmt, "bind_param"), array_merge(array($type), $params));

应该做这项工作

更新:您还必须更改参数数组:

$params = array(&$firstName, &$lastName, &$address, &$postcode, &$email, &$password);

如预期第二个和以下参数的引用。mysqli_stmt::bind_param


编辑:您的查询似乎是错误的。也许你拥有的字段比你在那里的变量少。狐狸

"INSERT INTO Users (field1, field2, field3, field4, field5, field6) VALUES (?, ?, ?, ?, ?, ?)"

其中,将字段名称替换为正确的名称


答案 2

从 PHP 5.6 开始,您可以使用参数解包作为call_user_func_array的替代方法,并且通常快 3 到 4 倍。

<?php
function foo ($a, $b) {
     return $a + $b;
}

$func = 'foo';
$values = array(1, 2);
call_user_func_array($func, $values);
//returns 3

$func(...$values);
//returns 3
?>

从这里拍摄

所以你的代码应该看起来像这样:

public function bind($query, $type, $params)
        {

            $this->query = $query;
            $stmt = $this->mysqli->prepare($this->query);
            $stmt->bind_param($type, ...$params);
            $stmt->execute;
        }

推荐