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

3

我正在编写的脚本的一部分需要我精确地了解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?

你是否通过获取另一个结果集来覆盖了初始结果集?应该还在那里。 - Kevin
这是一个很好的地方,可以发布你的实际代码来描述你的过程,而不是用言语解释。 - BigScar
为您添加了示例代码,请查看编辑部分。 - PickleBranston
@Ghost,我认为你说得对,$result 从未改变。 - BigScar
1个回答

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会消失。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接