2016-02-12 75 views
-2

假設我有一個表是這樣的:SQL查詢不斷「丟失」一行

+------+---------+--------------+-------------+---------------+ 
| id | tstamp | product_id |  name | configuration | 
+------+---------+--------------+-------------+---------------+ 
| 3 |  15 |   02 |  bike |  abc | 
| 2 |  16 |   03 |  car |  dfg | 
| 1 |  11 |   04 |  tree |  ehg | 
+------+---------+--------------+-------------+---------------+ 

當我運行像

SELECT id, tstamp, product_id, name, configuration 
FROM tl_iso_product_collection_item 
ORDER BY `id` DESC 

它返回3行的簡單查詢。如預期。作品,對吧?但是,如果我將這個查詢實現爲一個PHP腳本並嘗試獲取行,那麼總是會失去一個。總是。即使在最簡單的查詢。我在哪裏犯了一個錯誤?

腳本是這樣的:

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$connection = mysqli_connect('localhost', 'user', 'pw', 'db'); 

mysqli_set_charset($connection,"utf8"); 

$query = "SELECT id, tstamp, product_id, name, configuration 
    FROM table 
    ORDER BY `id` DESC " 

$result = mysqli_query($connection, $query); 

while ($row=mysqli_fetch_row($result)) { 
echo $row[0]; 
echo $row[1]; 
echo $row[2]; 
echo $row[3]; 
echo $row[4]; 
} 

mysqli_close($connection); 
?> 

這將導致顯示只有2個3行。我的問題是,爲什麼這樣?如果我將上面的查詢直接插入到phpmyadmin中,它會顯示3個結果,而不是2.這裏出現了什麼問題?我錯過了什麼嗎?提前致謝。當您遍歷結果使用,因此內部的「指針」,以目前的戰績獲得晉級在每個結果集的第二個記錄,併爲此 -

+0

你在$查詢定義btw後缺少一個分號 – RamRaider

+0

作爲一個側面提示,你可以通過使用'mysqli_fetch_assoc'而不是'mysqli_fetch_row'來幫助你自己,因爲你可以訪問'$ row ['product_id']' – M1ke

+0

你可以粘貼你的實際輸出嗎?您在上面的CLI中運行的查詢中有不同的表名。 – M1ke

回答

1
$fetch_allgemein = mysqli_fetch_array($result_allgemein); 
$fetch_configuration = mysqli_fetch_array($result_configuration); 

你抓取,已經在這裏每個查詢結果的第一條記錄

while ($row=mysqli_fetch_row($result_allgemein)) { 

後來,第一條記錄當然被省略了。

您將需要重置「指針」使用mysqli_result::data_seek如果你想獲得所有記錄在你的循環,你已經獲取每個第一記錄之後。

+0

我想知道,在再次通過所有行後,爲什麼我甚至有這兩行,事實上我沒有甚至不使用它們。刪除這兩行代碼適合我。但是,謝謝,我會記住你的解決方案! –