MYSQL:表更改后结果集会发生什么?

时间:2015-04-02 13:24:15

标签: php 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);
  }
}

问题是重置后会重复删除行,跳过或返回其他内容如NULL?

1 个答案:

答案 0 :(得分: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将会消失,因为它有一个新请求和另一个被调用的结果集。