2015-04-02 96 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会因为它的新的要求,另一个叫做结果集了。

相关问题