[英]Iterate through specific rows sql php
我有一張看起來像這樣的桌子
+-----------+--------+----------------+---------------------+-------------------+ | commentid | blogid | comment_author | comment_date | blog_comment | +-----------+--------+----------------+---------------------+-------------------+ | 2 | 5 | random guy | 2015-07-01 16:48:35 | | 3 | 5 | James | 2015-07-01 18:54:03 | +-----------+--------+----------------+---------------------+-------------------+
里面有兩行, blogid=5
當我運行這段代碼
$checkcomments = "SELECT * from blog_comments where blogid=5";
if ($result=$db->query($checkcomments)) {
while ($data=$result->fetch_object()) {
echo $data->comment_author;
}
}
它只告訴我一個名字, random guy
。
如何遍歷blogid=5
所有author_names
?
fetch_object()
僅會返回1個結果,因此是您的問題。
您要使用的是while循環內的fetch()
:
while ($data=$result->fetch(PDO::FETCH_OBJ)) {
echo $data->comment_author;
}
假設您正在使用PDO
?
如果您使用的是mysqli
,則只需執行以下操作:
while ($data=$result->fetch()) {
echo $data->comment_author;
}
就目前而言,您所擁有的代碼對我來說似乎是正確的……我們在while
或if
中看不到右括號。 如果while
循環僅獲取一行,則有兩種可能。 似乎您已經排除了查詢僅返回一行的可能性。
另一種可能性是循環可能過早退出,可能是因為遇到某些錯誤或引發了異常。 標准建議在此處適用,請確保已啟用錯誤報告。
要調試此程序,請縮短該循環,然后算出它經過了多少次,只需做一些真正簡單的事情即可...
$i = 0;
while ($data = $result->fetch_object() ) {
echo "#DEBUG: fetch count: " . ++$i ;
}
echo "#DEBUG: loop exit, count: " . $i ;
請注意,每次提取都會覆蓋$data
中先前的內容。 退出該循環時,您將擁有最后一行。 考慮將ORDER BY添加到查詢中以使結果更具確定性。 (您確定當前代碼的行確實輸出了第一行嗎?我們看到的一些錯誤是遍歷整個結果集,然后引用$data
...,然后您只看到最后一行。)
我懷疑在循環的某處,您正在覆蓋尚未使用的變量,例如$result
。 如果將其用於循環中的另一個查詢,則當再次回到循環頂部時,將無法再獲取“下一個”行,因為$result
不再指向原始行結果集。
底線是,問題不在您顯示的代碼行中。
http://ericlippert.com/2014/03/05/how-to-debug-small-programs/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.