繁体   English   中英

mysqli如何获取查询结果?

[英]How to get query result with mysqli?

我在CodeIgniter中有以下查询:

$user_data = $this->db
            ->select('table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, '
                    . 'table_roles.slug AS role_slug, table_user_settings.username, table_users.id_roles, '
                    . 'table_users.first_name, table_users.last_name, table_users.mobile_number, table_users.phone_number, '
                    . 'table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes')
            ->from('table_users')
            ->where('table_users.data', 0)
            ->join('table_roles', 'table_roles.id = table_users.id_roles', 'inner')
            ->join('table_user_settings', 'table_user_settings.GUID = table_users.GUID')
            ->where('table_user_settings.username', $username)
            ->where('table_user_settings.password', $password)
            ->get()->row_array();

    return ($user_data) ? $user_data : NULL;

我已经编写了以下代码进行转换:

 if($stmt = $this->db->prepare("SELECT table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, "
        . "table_roles.slug AS role_slug, table_users.id_roles, table_users.first_name, "
        . "table_users.last_name, table_users.mobile_number, table_users.phone_number, "
        . "table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes "
        . "FROM table_users "
        . "INNER JOIN table_roles ON table_roles.id = table_users.id_roles "
        . "INNER JOIN table_user_settings ON table_user_settings.GUID = table_users.GUID "
        . "WHERE table_users.data = 0 AND "
        . "table_user_settings.username = ? AND "
        . "table_user_settings.password = ? "))
    {
        $stmt->bind_param("ss",$username, $password);
        $stmt->bind_result($id, $email, $GUID, $slug, $id_roles, $first_name, $last_name,
            $mobile_number, $phone_number, $address, $city, $state, $zip_code, $notes);
        $result = $stmt->execute();
        $stmt->fetch();
        var_dump($stmt);
    }

    $stmt->close();
    return $result;

但是我不能将一个数组中的所有变量作为第一个代码返回。 在CodeIgniter中,我可以将所有结果作为-> get()-> row_array()之类的数组获得。 但是我不能在mysqli中做同样的事情,我只想将查询的所有选定值作为数组返回...有人可以帮助我进行此转换吗?

如果我理解正确,您是否想不循环就查询所有数组?

如果数据过多,查询可能需要一段时间,但是您可以直接从数据库尝试mysqli_fetch_all,如下所示(示例):

$sql = $mysqli->query("SELECT * FROM table WHERE status = '1'"); 
$results = mysqli_fetch_all($sql, MYSQLI_ASSOC); # all rows to array

另外:您需要PHP> = 5.3.0 mysqli_result :: fetch_all-mysqli_fetch_all —获取所有结果行为关联数组,数字数组或两者

====

编辑:上面的方法避免了循环,但是您需要自己对值进行转义,如下所示:

$email = $mysqli->real_escape_string($email);
$GUID = $mysqli->real_escape_string($GUID);

为了使用预先准备好的查询将所有内容都放入数组,您将必须使用循环:这是mysqli的局限性,这就是为什么许多人喜欢pdo的原因。 因此,对于您的情况:

if (!$stmt->execute()) {
    // handle error
}

// Extract result set and rows
$getresult = $stmt->get_result();
while ($data = $getresult->fetch_assoc()) {
    $result[] = $data;
}

$stmt->close();
return $result;

// debug or testing
echo "<pre>";
var_dump($result);
echo "</pre>";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM