2012-04-10 93 views
0

我試圖通過從MySQL數據庫這些行搶多行:MySQL查詢只抓取一行而不是多行。爲什麼?

$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行回來。那就是:

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

我希望得到多行(這麼多的ID)

請告訴我,我在做什麼錯。我還是MySQL的新手。

+2

不是你得到只有一排,但_DO not_調用'mysqli_query()''裏面的mysqli_fetch原因_ *()'。調用它並將其資源存儲在變量中,檢查該變量的FALSE,然後獲取。 – 2012-04-10 19:16:27

+0

只是好奇,爲什麼這是好的做法?謝謝。它會導致緩存不佳嗎? – 2012-04-10 19:22:09

+0

在提取內部調用查詢使得無法檢查錯誤。雖然它可能在沒有檢查錯誤的情況下工作,但只有one_行會返回時,在'while'循環中獲取多行時根本無法使用,這是您大部分時間執行的操作,因爲它會在每個循環迭代中重新執行查詢。 – 2012-04-10 19:23:57

回答

4

您必須循環一次,您將獲取每一行。

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

謝謝!這工作完美。對不起,在MySQL上做noob。像你這樣對新手們有耐心的人才能讓這個社區變得如此美好! :) – 2012-04-10 19:21:38

1

您通過您的結果需要循環:

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

這將在循環的每個循環中重新運行查詢。 – Interrobang 2012-04-10 19:15:09

+1

你正在調用每個循環迭代的查詢! – 2012-04-10 19:15:19

+0

我在更新,因爲你在投票。請重新考慮你的投票。 – 2012-04-10 19:15:49

相關問題