MySQLi 查询只返回一行

Posted

技术标签:

【中文标题】MySQLi 查询只返回一行【英文标题】:MySQLi query returns only one row 【发布时间】:2012-11-19 19:42:49 【问题描述】:

此代码仅返回一行,但应该返回 2 行。我已经在 phpMyAdmin 中尝试过 SQL,它完美地返回了 2 行。我在这里做错了什么?

$request_list_result = $mysqli->query("
SELECT buddy_requester_id, buddy_reciepient_id, user_id, user_fullname FROM sb_buddies
JOIN sb_users ON buddy_requester_id=user_id
WHERE buddy_status='0' AND buddy_reciepient_id='". get_uid() ."'");

$request_list_row = $request_list_result->fetch_array();

echo $request_list['user_fullname'];

顺便说一句,上面的代码是通过下面的脚本来处理 profile.php 的:

$index = new Template('views/template/one.php', array(
'subtitle' => 'Dashboard',
'stylesheets' => array('/assets/css/profile.css'),
'scripts' => array('/assets/js/dashboard.js'),
'sidebar' => 'sidebar.php',
'content' => 'views/profile.php',
'errors' => $errors,
'successes' => $successes,
'request_list' => $request_list_row //right here
), true);

【问题讨论】:

【参考方案1】:

您需要遍历结果。就目前而言,您只获取第一行。

$uid = get_uid();
$sql = "SELECT buddy_requester_id, buddy_reciepient_id, user_id, user_fullname 
        FROM sb_buddies
        JOIN sb_users ON buddy_requester_id=user_id
        WHERE buddy_status='0' AND buddy_reciepient_id='$uid'";

$request_list_result = $mysqli->query($sql);

while ($request_list_row = $request_list_result->fetch_array()) 
    echo $request_list['user_fullname'];

【讨论】:

嗯。我明白你的意思,试过了,但它不起作用。请检查我上次的编辑,看看这是否会影响你的回答:-)【参考方案2】:
 mysqli_result::fetch_array

只获取一行作为数组,你正在寻找

 mysqli_result::fetch_all

获取所有行。

更多信息在这里

http://php.net/manual/en/mysqli-result.fetch-all.php

【讨论】:

如果我使用 fetch_all 如下: $request_list_result->fetch_all();它说:调用未定义的方法 mysqli_result::fetch_all()【参考方案3】:

您需要遍历结果(如 TheSmose 所述)

while ($request_list_row = $request_list_result->fetch_array()) 
    echo $request_list['user_fullname'];

AND您需要将结果数组 $request_list 发送到模板,而不是 $request_list_row

改变这个

'request_list' => $request_list_row //right here

到此

'request_list' => $request_list //right here

如果您的模板中不仅仅需要user_fullname(并且您没有mysqli_result::fetch_all 所需的PHP >= 5.3),那么您需要在循环内构建自己的数组。

我不知道你的模板代码需要什么,但你可以试试

while ($request_list_row = $request_list_result->fetch_array()) 
    echo $request_list[] = $request_list_row;

【讨论】:

以上是关于MySQLi 查询只返回一行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 从 mySQLi 查询中回显每一行?

Mysqli只获取一行/属性[重复]

在 PHP 中,为啥 mysqli_num_rows 不为返回行数为 0 的查询返回整数?

php中mysqli 处理查询结果集的几个方法

mysqli 更新查询是不是应该返回结果?

SQL 在 select 子查询中只返回一行或 null