2

私はこの機能を持っています:

function findAllmessageSender(){
$all_from =  mysql_query("SELECT DISTINCT `from_id`  FROM chat");
$names = array();
while ($row = mysql_fetch_array($all_from)) {
$names[] = $row[0];
}
return($names);
}

これは、プライベート メッセージング システムでユーザーのすべての ID を返します。次に、user_id がログインしたユーザーと等しく、from_id がfrom_id前の関数から取得したすべてのメッセージと等しいすべてのメッセージを取得します。

 function fetchAllMessages($user_id){
 $from_id = array();
 $from_id = findAllmessageSender();
 $data = '\'' . implode('\', \'', $from_id) . '\'';
 //if I echo out $ data I get these numbers '113', '141', '109', '111' and that's what I want
 $q=array();
$q = mysql_query("SELECT * FROM chat WHERE `to_id` = '$user_id' AND `from_id`   IN($data)") or die(mysql_error());
 $try = mysql_fetch_assoc($q);
 print_r($try);
 }

print_r は 1 つの結果のみを返します。

Array ( 
[id] => 3505 
[from_id] => 111 
[to_id] => 109 
[message] => how are you? 
[sent] => 1343109753 
[recd] => 1 
[system_message] => no 
)

ただし、メッセージは 4 つあるはずです。

4

2 に答える 2

4

mysql_fetch_assoc()返される行ごとに呼び出す必要があります。一度だけ呼び出すとmysql_fetch_assoc()、最初の行のみが返されます。

次のようなことを試してください:

$result = mysql_query("SELECT * FROM chat WHERE `to_id` = '$user_id' AND `from_id`   IN($data)") or die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
}
于 2012-09-27T05:32:44.140 に答える
0

「mysql_fetch_assoc」は、フェッチされた行に対応する連想配列を返し、内部データ ポインターを前方に移動します。

次のように配列を反復する必要があります。

        while ($row = mysql_fetch_assoc($q)) {      
           echo $row["message"]; 

}

于 2012-09-27T05:37:24.423 に答える