2015-04-02 76 views
3

我正在編寫的腳本的一部分需要我確切知道結果集如何從MYSQL查詢獲取它的信息。MYSQL:表更改後結果集會發生什麼變化?

我有一個SQL查詢的標準結果,然後我使用fetch_array創建一個行數組。

在循環瀏覽這個內容時,假設我刪除了從表中找到的其中一行。如果我將結果的指針重置回第一個,那麼即使它不再存在,是否會再次找到該行,是否找到空行或完全錯過該行?

換句話說,每個行都會根據需要向MYSQL詢問結果,還是一次性得到整個數組,因此它不會在事後對錶進行任何更改?

乾杯提前

編輯

$result = $conn->query("SELECT ID, value FROM table"); 
while($row=$result->fetch_array()){ 
    if(x){ 
    $conn->query("DELETE FROM table WHERE ID=$row['ID']"); 
    mysqli_data_seek($result,0); 
    } 
} 

的問題是,復位後重複意志刪除的行,得到跳過或返回別的東西,如空?

+0

你是否通過獲取另一組覆蓋了初始結果集?應該仍然存在 – Ghost 2015-04-02 13:26:49

+0

這將是一個很好的地方發佈你的實際代碼來描述你的過程,而不是用文字來解釋它。 – BigScar 2015-04-02 13:29:55

+0

在編輯中增加了示例代碼 – PickleBranston 2015-04-02 14:05:34

回答

2

不,它不會刪除初始提取結果集中的那一行。

但當然它會刪除您當前表中的行。

如果您嘗試重置指針,那麼使用該行的初始結果集仍駐留。除非你用另一個覆蓋它。

考慮這個例子。比方說,你有這樣的表裏面:

+----+--------+ 
| id | value | 
+----+--------+ 
| 1 | test1 | 
| 2 | test2 | 
| 5 | test5 | 
+----+--------+ 

如果你做這樣的操作:

$result = $conn->query('SELECT id, value FROM mytable'); // sample query 
while($row = $result->fetch_assoc()) { // fetch all results 
    if($row['id'] == 5) { // some condition 
     $conn->query('DELETE FROM mytable WHERE id = 5'); // delete one row in table 
    } 
} 

$result->data_seek(0); // reset the pointer 
while($row = $result->fetch_assoc()) { // fetch the same result set 
    echo $row['id'] . '<br/>'; 
} 

它會刪除特定行你但沒有一個在初始結果。

在最初的負載,它會顯示:

1 
2 
5 

如果你刷新一下,現在5會因爲它的新的要求,另一個叫做結果集了。

相關問題