2013-06-27 48 views
1

我希望這是一個簡單的編碼錯誤。 當試圖從數據庫表中獲取所有結果時,第一個結果總是被忽略。即使向數據庫添加和刪除信息,它也會始終以最低的ID漏掉結果。從表中選擇*總是會丟失第一行結果

$data = mysql_query("SELECT * FROM tbl_messages") 
or die(mysql_error()); 

$info = mysql_fetch_array($data); 

while($info = mysql_fetch_array($data)) 
{ 
Print "<a href=\"../message/index.php?user=\">" .$info['subject']. "</a>"; 
    echo "<hr>"; 
} 

回答

0

刪除第一個mysql_fetch_array聲明。

$data = mysql_query("SELECT * FROM tbl_messages") 
or die(mysql_error()); 

while($info = mysql_fetch_array($data)) 
{ 
Print "<a href=\"../message/index.php?user=\">" .$info['subject']. "</a>"; 
    echo "<hr>"; 
} 

您跳過通過使用如上面的代碼中的第一項。

mysql_fetch_array

返回對應於所提取的行和向前移動 內部數據指針的陣列。

這意味着,當你開始時,你已經閱讀了第一行,但尚未使用它。

+0

AHH,你天才!這工作,我知道這將是簡單的。傻我。 – user2527750

2

您當前的代碼調用mysql_fetch_array和結果(結果集的第一行)到$info分配。您不會對$info執行任何操作,在下一行中,您可以用另一個電話mysql_fetch_array覆蓋它。

您需要刪除這一行:

$info = mysql_fetch_array($data); 
1

從PHP手冊:

array mysql_fetch_array (resource $result [, int $result_type = MYSQL_BOTH ]) 

返回對應於所提取的行和向前移動所述內部數據指針的陣列。

所以 $data = mysql_query(...)後,你會得到一個數組$data$data第一要素內部數據指針指向。

mysql_fetch_array(...)的第一個呼叫將內部數據點向前移動,因此它現在指向第二個元素。

然後,在發出第一個打印之前,您的while循環再次調用mysql_fetch_array(...),因此第二個元素被打印。

您可以通過刪除這一行修復:

$info = mysql_fetch_array($data); 
0

我有過這樣的問題也與我的表查詢的忽略行0(第一次出現),現在我看到這個,我終於明白了這是怎麼回事。

澄清也是可以理解的。

您正在詢問query_fetch_array,並將其發現在$info中。這似乎很好。接下來你要求其餘的行,因爲你只是從可能的回報中刪除了一行,它也可以很好地工作。

刪除此行:

$info = mysql_fetch_array($data); 

,你會得到從表中的所有行。或者,如果您想知道,ECHO之前while循環以您正在打印的方式或只是嘗試var_dump它。