通过 bind_param 传递数组

Passing array through bind_param

我正在通过 bind_param 函数传递一组值,我这样做的方式是这样的:

<?php
class Query{
    private $_mysqli;

    /*
     * @param object $mysqli
     */
    public function __construct($mysqli)
    {
        $this->_mysqli = $mysqli;
    }

    /*
     * @param string query
     * @param string $types
     * @param array $values
     */
    public function read($query = "", $type = "", $params = array())
    {
        $query = ($query === "") ? die("Read error: Query") : $query;
        $type = ($type === "") ? die("Read error: Type") : array($type);
        $params = (count($params) == 0) ? die("Read error: Params") : $params;

        $values = array();
        foreach($params as $key => $value) {
            $values[$key] = &$params[$key];
        }

        if ($stmt = $this->_mysqli->prepare($query))
        {
            call_user_func_array(array($stmt, "bind_param"), array_merge($type, $values));
            $stmt->execute();
            $fields = array();
            for($i=0; $i<count($params); $i++){
                $fields[$i] = $params[$i];
            }
            call_user_func_array(array($stmt, "bind_result"), $fields);

            $array = array();
            while($data = $stmt->fetch())
            {
                $array[] = $data;
            }

            return $array;
        }
    }
}

这是我使用函数的方式

<?php
//$mysqli is the mysqli connection
$query = new Query($mysqli);

$query_str = "SELECT * FROM users WHERE voornaam = ? AND achternaam = ?";
$types = "ss";
$params = array("Firstname", "Lastname");
var_dump($query->read($query_str, $types, $params));
?>

我卡住的部分是:

<?php
$fields = array();
for($i=0; $i<count($params); $i++){
    $fields[$i] = $params[$i];
}
call_user_func_array(array($stmt, "bind_result"), $fields);

$array = array();
while($data = $stmt->fetch())
{
    $array[] = $data;
}
?>

不知道哪里错了,我对while循环有感觉。 希望你们能帮助我使这个功能正常工作:)

您正在绑定结果,因此您不需要将获取的数据分配给新变量,

mysqli_stmt::bind_result -- mysqli_stmt_bind_result — Binds variables to a prepared statement for result storage

当您使用 call_user_func_array 时,根据此 comment,您的循环:

while($data = $stmt->fetch())
{
    $array[] = $data;
}

可能如下:

while($stmt->fetch())
{
    // params which you had bind it into bindParams
    $array[] = $params;
}