在PHP中,我在while循环中使用mysqli_fetch_assoc()来获取特定查询中的所有记录.

我想知道如果在运行循环时(通过另一个进程或服务器)更改了数据,从而使记录不再与查询匹配,会发生什么情况.还会取吗?

换句话说,当您执行query()时,获取的记录数组是否固定?还是不是?

更新:

我了解这是一项功能,即在更改数据时结果集不会更改,但是如果您确实想这样做,该怎么办?在我的循环中,我对其他服务器已更新的记录不感兴趣.我该如何检查,而不必对获取的每个记录进行新查询?

更新:

详细说明:

我正在研究某种搜索引擎抓取工具,用于在数据库中搜索值.这是由几个服务器同时完成的.报废的物品将不再被搜索.我真的无法控制哪个服务器搜索哪个项目,我希望可以在获取记录集的同时检查项目的状态.由于这是一个很大的数据集,因此我不会在搜索之前转移整个结果集,而是在需要时提取每条记录…

解决方法:

介绍

I’m wondering what happens if the data is changed while running the loop (by another process or server), so that the record doesn’t match the query any more. Will it still be fetched?

是.

In other words, is the array of records that are fetched fixed, when you do query()? Or is it not?

是.

如果DBMS容易受到表更新和查询结果集迭代之间的竞争条件的影响,那将是不值得的.

当然,就数据库本身而言,在更改任何数据之前,您的SELECT查询已经完成.结果集将缓存在数据库和PHP脚本之间的层中的某个位置.

深入的

In the context of databases, a single logical operation on the data is called a transaction.

用户启动的事务可以包含多个连续查询,但是ISO / IEC 9075-2中的4.33.4和4.33.5描述了如何在每个查询级别隐式进行查询:

The following SQL-statements are transaction-initiating

SQL-statements, i.e., if there is no current SQLtransaction, and an

SQL-statement of this class is executed, then an SQL-transaction is

initiated, usually before execution of that SQL-statement proceeds:

All SQL-schema statements

The following SQL-transaction statements:

.

.

.

.

The following SQL-data statements:

[..]

.

.

.

[..]

[..]

另外,4.35.6:

Effects of SQL-statements in an SQL-transaction

The execution of an SQL-statement within an SQL-transaction has no

effect on SQL-data or schemas [..]. Together with serializable

execution, this implies that all read operations are repeatable

within an SQL-transaction at isolation level SERIALIZABLE, except

for:

1) The effects of changes to SQL-data or schemas and its contents

made explicitly by the SQL-transaction itself.

2) The effects of differences in SQL parameter values supplied to externally-invoked

procedures.

3) The effects of references to time-varying system

variables such as CURRENT_DATE and CURRENT_USER.

您的广泛要求

I understand that it’s a feature that the resultset is not changed when the data is changed, but what if you actually WANT that? In my loop I’m not interested in records that are already updated by another server. How do I check for that, without doing a new query for each record that I fetch??

你不可以.

尽管可以控制连接器执行的缓冲类型(在本例中为MySQLi),但不能覆盖上述SQL的低级事实:INSERT或UPDATE或DELETE都不会影响正在进行的SELECT.

SELECT完成后,结果是独立的.您可以控制此独立数据的传输缓冲,但这并不能真正帮助您完成听起来像您想做的事情.

坦率地说,这很幸运,因为您想做的事情听起来很奇怪!

标签:mysqli,php

来源: https://codeday.me/bug/20191208/2088560.html

php fetchassoc 跨表,php-mysqli_fetch_assoc-如果同时更改数据会怎样?相关推荐

  1. Bootstrap4+MySQL前后端综合实训-Day08-AM【多表查询sql语句、关联数据的假删除、自动增长主键的获取、栏目管理“数据编辑”按钮的实现】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目   录 多表查询sql语句 关联数据的假删除(status状态码/数据可恢 ...

  2. ORM单表查询,跨表查询,分组查询

    ORM单表查询,跨表查询,分组查询 单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models.T ...

  3. mysql支持跨表delete删除多表记录

    前几天写了Mysql跨表更新的一篇总结,今天我们看下跨表删除.  在Mysql4.0之后,mysql开始支持跨表delete.  Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间 ...

  4. php帝国程序跨表调用数组,帝国CMS 跨表调用相关信息标签

    摘要:  帝国默认只能从当前表调用相关信息,这个标签就打破了此限制.安装说明1.在网站后台,导入标签.本地标签文件为当前文件夹下mylink.bq文件.2.将myfun.php文... 帝国默认只能从 ...

  5. 顺序表的基本操作实验报告_INDIRECT函数从入门到进阶之相同顺序跨表引用

    我们通常需要对某一个工作簿中的若干个工作表中的某一类数据进行汇总,对Excel不是很精通的人通常都是复制粘贴过来,不仅费时费力,还容易出错,有没有更简便.准确.高效的做法呢?今天就让我们一起来学习一下 ...

  6. sql跨表查询_跨表查询经常有,何为跨表更新?

    有点 SQL 基础的朋友肯定听过 「跨表查询」,那啥是跨表更新啊? 背景 项目新导入了一批人员数据,这些人的有的部门名称发生了变化,有的联系方式发生了变化,暂且称该表为 t_dept_members, ...

  7. sql跨表查询_跨表更新,看到自己写的SQL像个憨憨

    有点 SQL 基础的朋友肯定听过 「跨表查询」,那啥是跨表更新啊? 背景 项目新导入了一批人员数据,这些人的有的部门名称发生了变化,有的联系方式发生了变化,暂且称该表为 t_dept_members, ...

  8. 实战 | 利用Delta Lake使Spark SQL支持跨表CRUD操作

    转载自  实战 | 利用Delta Lake使Spark SQL支持跨表CRUD操作 供稿 | eBay ADI-Carmel Team 作者 | 金澜涛 编辑 | 顾欣怡 本文7309字,预计阅读时 ...

  9. Django之model补充:一对多、跨表操作

    表结构概述 model.py : class Something(models.Model):name = models.CharField(max_length=32)class UserType( ...

最新文章

  1. vue 如何判断两个数组相同_如何判断车头与障碍物的距离,教你两个办法,轻松靠墙10公分...
  2. web.config mysql_web.config配置mysql数据库连接
  3. mysql drbd pacemaker_corosync+pacemaker+mysql+drbd 实现mysql的高可用
  4. android ui状态栏高度,Android--状态栏高度,导航栏高度,Window高度,DecorView高度,heightPixels...
  5. 关于 nohup 执行命令以后 需要再按回车才能起效的解决办法
  6. ideal如何快速导入import_【MAC版】pr预设安装目录?pr如何快速批量导入lut
  7. LeetCode 222. 完全二叉树的节点个数(递归)
  8. git commit--amend
  9. Java操作xls文件,数据去重
  10. 华为nova7se怎么看云相册_华为nova7SE拍照怎么样?华为nova7SE夜拍照效果如何
  11. Java学习笔记(二)JavaSE
  12. datatables实现复选框全选反选!!(亲测有效)
  13. Java堆内存溢出造成OS卡顿/服务中断的一种情况
  14. 更新后的哥德巴赫猜想(位运算)
  15. 关于时区的环境变量TZ
  16. 大商创 常见问题 mysql_大商创手机端出现404的官方解决方案
  17. 老鸟谈谈JAVA EE的学习
  18. 动态壁纸安卓_梦象动态壁纸下载
  19. python玫瑰花数量的含义_玫瑰花的数量代表的意义
  20. 计算机硬件基础与维修系列丛书,PC升级与维护大全(原书第12版附光盘)/计算机硬件基础与维修系列丛书...

热门文章

  1. 压缩追踪Compressive Tracking源码理解
  2. 决策树ID3和C4.5算法Python实现源码
  3. cve 爬虫_好用的Google漏洞爬虫:Google Mass Explorer
  4. 进度条模块tqdm介绍
  5. numpy.add详解
  6. 回归--一个平凡人的2018年总结及2019年展望
  7. 分布式系统中的限流与熔断
  8. chrome的全局搜索快捷键
  9. linux 进程综合指令
  10. SHELL网络爬虫实例剖析--转载