Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Returning Multiple Rows with MySqli and Arrays

Tags:

arrays

php

mysqli

For the past two days or so I've been converting my functions to mysqli. I've run into a problem. I have a function that returns an array containing a row from the database. However, I want the array to contain multiple rows versus one. Also, how would I be able to echo out the individual posts. Here is my failed attempt that only displays one row in the array.

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

}}

Here I am trying to display the data.

$user_id = 1;

$posts = display_posts($mysqli, $user_id);

//Not sure what to do with $posts. A While loop perhaps to display each post?
like image 744
thank_you Avatar asked Sep 04 '12 22:09

thank_you


2 Answers

You have to use a loop to get them all at once:

<?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();
like image 54
Jesse Bunch Avatar answered Oct 20 '22 12:10

Jesse Bunch


Why not use directly like this:

$result = mysqli_fetch_all($mysqli->query($query), MYSQLI_ASSOC);
like image 29
SNEILΛ Avatar answered Oct 20 '22 11:10

SNEILΛ