我正在编写的部分脚本要求我确切地知道结果集如何从 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/