php - PHP mysqli query 和 fetch_(row/assoc) 是否使用实时数据?

标签 php mysql mysqli

当我们在循环中使用 PHP mysqli->query() 然后 fetch_row/fetch_assoc 时,PHP 是否首先缓存数据并返回整个结果(因此如果行同时更新, fetch_row()仍然返回旧数据?还是为我们提供实时数据?

有没有什么地方可以设置这种行为(例如设置数据库类型、php 配置...?)以便我们可以控制 PHP 是否应该根据需要使用缓存数据或实时数据。

例如,我们有 2 个进程修改同一个数据库表 'users':

文件 1:

<?php
$res=$mysqli->query("SELECT * FROM users WHERE id > 0 and id < 100 ORDER BY id ASC");
while($r=$res->fetch_assoc()){
    ...do something that takes 10 mins each loop...
    print_r($r['active']);
}

文件 2:

$mysqli->query("UPDATE users SET `active` = 'TRUE' where id = 90");

假设最初所有用户都将 active 设置为 FALSE。 我们在一个终端上运行文件 1,然后在另一个终端上运行文件 2。

文件1来处理用户“90”时,打印出的是“TRUE”还是“FALSE”?

谢谢。

最佳答案

$res=$mysqli->query("SELECT * FROM users WHERE id > 0 and id < 100 ORDER BY id ASC");

您的查询在那一步执行。之后您如何访问数据不会使 PHP 再次查询记录。您正在运行的循环位于一个 PHP 内部变量上,该变量包含查询返回的所有数据。在你的循环中没有与 MySQL 服务器的进一步通信。

如果在查询之后和显示之前更改了记录,您将看到显示的是旧数据。不是实时的。

要获取在此期间可能已被另一个进程更新的最新数据(我们通常在这里谈论微/毫秒/任何秒),您需要再次查询。

At the time when file 1 comes to process the user "90", does it print out "TRUE" or "FALSE"?

错误

因为当您查询数据库时,它被设置为 FALSE,除非您再次查询,否则当前值是什么并不重要。

关于php - PHP mysqli query 和 fetch_(row/assoc) 是否使用实时数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41870190/

相关文章:

php - reCAPTCHA v3 验证分数出现问题

java - 如何根据搜索值从jtable和sql数据库中删除搜索行

python - 当列表长度不同时在 Python 中迭代多个列表

php - 如何从表单中获取表名值并将数据插入表中?

php - 供应商 :Publish - Nothing to publish for tag [] - Only on production server

php - 查找mysql错误发生位置

MySQL Group By If 子句

php - 无法连接到mysql,已经尝试了很多东西

php - mysqli::query(): 在 foreach 循环的第一行之后无法获取 mysqli

php - 警告:mysqli_query():无法在简单的php页面中获取mysqli