我写的一部分脚本要求我确切地知道结果集如何从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?
答案 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
将会消失,因为它有一个新请求和另一个被调用的结果集。