php mysqli only returns one row

2019-01-01 11:24发布

This code only returns one row, but it should return 2 rows. I have tried the sql in php myadmin and it perfectly returned 2 rows. What am I doing wrong here?

$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'];

Btw, the code above is getting process to profile.php via following script:

$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);

3条回答
春风洒进眼中
2楼-- · 2019-01-01 12:00

You need to loop through the results (as TheSmose mentioned)

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

AND you need to send the resulting array $request_list to the template rather than $request_list_row.

Change this

'request_list' => $request_list_row //right here

to this

'request_list' => $request_list //right here

If you want more than just user_fullname in your template (and you don't have PHP >= 5.3 required for mysqli_result::fetch_all), then you will need to build up your own array inside the loop.

I don't know what your template code expects, but you could try

while ($request_list_row = $request_list_result->fetch_array()) {
    echo $request_list[] = $request_list_row;
}
查看更多
余生无你
3楼-- · 2019-01-01 12:02
 mysqli_result::fetch_array

only fetches a single row as an array, you are looking for

 mysqli_result::fetch_all

to fetch all the rows.

More info here

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

查看更多
永恒的永恒
4楼-- · 2019-01-01 12:11

You need to loop through the results. As it stands, you're only fetching the first row.

$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'];
}
查看更多
登录 后发表回答