簡體   English   中英

遍歷特定行sql php

[英]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;
}

就目前而言,您所擁有的代碼對我來說似乎是正確的……我們在whileif中看不到右括號。 如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM