2012-09-04 1 views
5

過去2日間、私は関数をmysqliに変換してきました。私は問題に遭遇しました。私は、データベースから行を含む配列を返す関数があります。しかし、配列に複数行が含まれているようにしたい。また、どのようにして個々の投稿をエコーアウトすることができますか?ここでは、配列に1行しか表示されない失敗した試みがあります。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? 

答えて

11

<?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

私はecへの答えを得ることを望んでいましたが個々の価値を引き出す前に、私は自分自身を考え出しました。それにもかかわらず、助けてくれてありがとう。私は関数 'resultToArray'を取り出し、元の関数に追加することにしました。 – jason328

5

なぜ、このように直接使用しない:

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

なぜこれが機能するのか説明した方が良い答えです。 –

+1

@KateGregory実際に説明するものは何もありません。この関数は5.3以降でのみ有効であり、mysqlndの下でのみ利用可能です。 –

+0

説明はあまりありません。しばらくのサイクルを行うのではなく、使用可能なmysqliメソッドを使用して、一連の結果を取得します。また、特別な関数を宣言することも避けてください。そして、はい、それは5.3を超えています。しかし、私が知っている限り、mysqliも5.3以上です –

1

は私が遅れてんだけど、私はこれを信じますあなたが達成したかったものです:

$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(); 
関連する問題