php - MYSQL:更改表后结果集会发生什么变化?

标签 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)吗?

最佳答案

不,它不会删除初始获取结果集中的那一行。

当然,它会删除当前表中的行。

如果您尝试重置指针,该行的初始结果集仍然存在。除非你用另一个覆盖它。

考虑这个例子。假设你的 table 里有这个:

+----+--------+
| 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 将消失,因为它是一个新的请求和调用的另一个结果集。

关于php - MYSQL:更改表后结果集会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29414113/

相关文章:

mysql - 多重选择、子组

mysql - 触发器的语法错误,无法修复,具有pra1表和pra1_audit触发器表

php - 正确插入 PhP & MySQL 用户数据

PHP:将变量转换为空

php - Instagram API 如何获取用户 ID?

mysql - 为什么MySql在进行建表DDL时提示字段名是保留关键字?

mysql - SQL 获取在同一查询上执行更新的行的 ID

php - 服务器迁移后 Paypal Express Checkout 中断

php - MySql 获取最近 10 条评论以及所有子评论

php - Wordpress 安装 - php 和 mysql 没有互相交谈来访问数据库?