使用MySqli和数组返回多行


Returning Multiple Rows with MySqli and Arrays

在过去的两天左右,我一直在将函数转换为mysqli。我遇到了一个问题。我有一个函数,它返回一个数组,该数组包含数据库中的一行。但是,我希望数组包含多行,而不是一行。另外,我该如何回应个别帖子。这是我失败的尝试,只显示数组中的一行。

$mysqli = new mysqli("localhost", "user", "password", "database");   
function display_posts ($mysqli, $user_id) {
   $fields = "`primary_id`, `poster_id`, `profile_user_id`, `post`";   
   $user_id = (int)$user_id;
   $query = "SELECT DISTINCT $fields FROM `posts` WHERE `profile_user_id` = $user_id 
   LIMIT 4";                    
   if ($result = $mysqli->query($query)) {
   $row = $result->fetch_assoc();
   return $row;
   $result->free();
   $stmt->close();
}}

我在这里尝试显示数据。

$user_id = 1;
$posts = display_posts($mysqli, $user_id);
//Not sure what to do with $posts. A While loop perhaps to display each post?

您必须使用一个循环来同时获取所有内容:

<?php
function resultToArray($result) {
    $rows = array();
    while($row = $result->fetch_assoc()) {
        $rows[] = $row;
    }
    return $rows;
}
// Usage
$query = 'SELECT DISTINCT $fields FROM `posts` WHERE `profile_user_id` = $user_id LIMIT 4';
$result = $mysqli->query($query);
$rows = resultToArray($result);
var_dump($rows); // Array of rows
$result->free();

为什么不直接这样使用:

$result = mysqli_fetch_all($mysqli->query($query), MYSQLI_ASSOC);

我迟到了,但我相信这就是你想要实现的:

$mysqli = new mysqli("localhost", "user", "password", "database");
$fields = "`primary_id`, `poster_id`, `profile_user_id`, `post`";
function display_posts () {
    global $mysqli;
    global $fields;
    $query = "SELECT DISTINCT $fields FROM `posts` WHERE `profile_user_id` = $user_id LIMIT 4";
    $posts = $mysqli -> query($query) or die('Error: '.$mysqli -> error);
    if ($posts -> num_rows > 0) {
        while ($row = $posts -> fetch_assoc()) {
        $value = $row['/*The table column here (You can repeat this line with a different variable e.g. $value 2, $value 3 etc and matching them with the respective table column)*/'];
        echo $value./*Concatenate the other variables ($value 1 etc) here*/'<br />';
        }
    }else {
        echo 'No records found.';
    }
}
//Call the function
display_posts ();