2012-04-10 3 views
0

私は、MySQLデータベースからこれらのラインを介して複数の行をつかむしようとしている:MySQL複数クエリではなく1行を取得するクエリのみ。どうして?

$msg_sql = "SELECT * FROM ".TABLE_PREFIX."quotes ORDER BY rand(curdate()) LIMIT 3"; 
$msg_res = mysqli_fetch_assoc(mysqli_query($link, $msg_sql)); 
print_r($msg_res); 

しかし、私は唯一の1行を取り戻します。である:私は複数行(ので、複数のIDを)取得したい

Array ([id] => 1 [message] => test_message [Link] => link here) 

私が間違ってやっているものを私に教えてください。私はまだMySQLが初めてです。

+2

なぜなら、1行しか取得していないのではなく、mysqli_fetch _ *()内で 'mysqli_query()'を呼び出していないからです。変数を呼び出してその変数に変数を格納し、その変数に対してFALSEをチェックしてからフェッチします。 –

+0

なぜこれが良い習慣であるかということだけに興味がありますか?ありがとうございました。キャッシングが貧弱になっていますか? –

+0

フェッチ内でクエリを呼び出すと、エラーをチェックすることができなくなります。そして、_only one_ rowが返されると期待されるときには(エラーをチェックすることなく)動作するかもしれませんが、whileループで複数の行をフェッチするときにはまったく使用できません。これはほとんどの場合です。各ループ反復でクエリを再実行します。 –

答えて

4

あなたはフェッチの行ごとに一回ループする必要があります。

$result = mysqli_query($link, $msg_sql); 
while ($item = mysqli_fetch_assoc($result)) { 
    print_r($item); 
} 
+0

ありがとうございます!これは完全に機能しました。 MySQLでnoobとしてごめんなさい。初心者に忍耐力を持っているようなあなたのような人々は、このコミュニティをとても魅力的なものにしています! :) –

1

あなたはあなたの結果をループする必要があります。

$results = mysqli_query($link, $msg_sql); 
while ($msg_res = mysqli_fetch_assoc($results)) 
{ 
    print_r($msg_res); 
} 
+1

これは、ループの各サイクルでクエリを再実行します。 – Interrobang

+1

各ループの繰り返しでクエリを呼び出しています。 –

+0

あなたが投票していたときに更新していました。あなたの投票を再考してください。 –

関連する問題