2012-09-04 24 views
5

Durante los últimos dos días he estado convirtiendo mis funciones en mysqli. Me encontré con un problema. Tengo una función que devuelve una matriz que contiene una fila de la base de datos. Sin embargo, quiero que la matriz contenga varias filas contra una. Además, ¿cómo podría hacer eco de las publicaciones individuales? Aquí está mi intento fallido que solo muestra una fila en la matriz.Devolución de varias filas con MySqli y matrices

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

}} 

Aquí estoy tratando de mostrar los datos.

$user_id = 1; 

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

//Not sure what to do with $posts. A While loop perhaps to display each post? 

Respuesta

11

Usted tiene que usar un bucle para llegar a todos ellos a la vez:

<?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(); 
+0

Aunque esperaba obtener una respuesta ¿cómo ec En cada valor individual, seguí adelante y lo descubrí por mi cuenta. Gracias por la ayuda, sin embargo. Decidí eliminar la función 'resultToArray' y anexarla a mi función original. – jason328

5

Por qué no usar directamente como esto:

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

esto sería una mejor respuesta si explicaras por qué funciona –

+1

@KateGregory no hay nada que explicar en realidad. Además de que esta función solo está disponible desde 5.3 y solo bajo mysqlnd. –

+0

No hay mucho que explicar. En lugar de hacer un ciclo de tiempo, use los métodos mysqli disponibles para obtener el conjunto completo de resultados. También evitando declarar una función adicional para ello. Y sí, es> 5.3 arriba. Pero por lo que sé mysqli también es 5.3 y hasta –

1

llego tarde, pero creo que esta es lo que quería lograr:

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