PHP增删改查怎么更新多条数据_php批量更新代码【方案】

7次阅读

PHP 批量更新数据库有五种方案:一、CASE WHEN 单语句更新;二、INSERT ON DUPLICATE KEY UPDATE;三、事务包裹多条 UPDATE;四、MySQLi multi_query;五、PDO 预处理循环执行。

PHP 增删改查怎么更新多条数据_php 批量更新代码【方案】

如果您需要在 PHP 中对数据库中的多条记录进行更新操作,而不是逐条执行 UPDATE 语句,则可采用批量更新方式以提升效率并减少数据库连接开销。以下是实现 PHP 批量更新的多种方案:

一、使用单条 UPDATE 语句配合 CASE WHEN

该方法通过构造一条包含多个 WHEN 条件的 SQL 语句,在一次数据库请求中完成多条记录的差异化更新,适用于主键或唯一标识明确且更新字段值各异的场景。

1、准备待更新的数据数组,每个元素包含 id 和对应的新字段值,例如:[[‘id’ => 1, ‘status’ => ‘done’], [‘id’ => 2, ‘status’ => ‘pending’] ]

2、拼接 SQL 语句,使用 CASE WHEN 根据 id 匹配并赋值,如:UPDATE orders SET status = CASE id WHEN 1 THEN ‘done’ WHEN 2 THEN ‘pending’ END WHERE id IN (1,2)

立即学习PHP 免费学习笔记(深入)”;

3、使用 PDO 执行该 SQL,并绑定参数(若需防注入,应将 id 和值均作为参数化处理)。

二、使用 INSERT … ON DUPLICATE KEY UPDATE

该方法依赖于表中存在 PRIMARY KEY 或 UNIQUE 索引,先尝试插入,若发生键冲突则执行 UPDATE,适合需要“存在即更新、不存在可忽略”的批量场景。

1、构建 INSERT 语句,VALUES 部分列出所有待更新记录的字段值,例如:INSERT INTO products (id, name, price) VALUES (1,’A’,99),(2,’B’,199) ON DUPLICATE KEY UPDATE name=VALUES(name), price=VALUES(price)

2、确保表结构中 id 字段具有 PRIMARY KEY 或 UNIQUE 约束,否则 ON DUPLICATE KEY UPDATE 不会触发。

3、通过 PDO::exec()执行该语句,无需预处理参数,但需注意 VALUES()函数引用的是当前行的输入值。

三、使用事务包裹多条 UPDATE 语句

该方法将多条独立 UPDATE 语句置于同一事务中执行,保证原子性与一致性,适用于逻辑复杂、需校验中间状态或与其他操作联动的场景。

1、调用 PDO::beginTransaction()开启事务。

2、遍历数据数组,为每条记录生成独立 UPDATE 语句,例如:UPDATE users SET email = ? WHERE id = ?,并使用 prepare/execute 逐条执行。

3、全部执行成功后调用 PDO::commit()提交;若任一语句失败,则捕获异常并调用 PDO::rollback()回滚。

四、使用 MySQLi 多查询(multi_query)

该方法利用 MySQLi 扩展的 multi_query()函数一次性发送多条 SQL 指令,适用于不支持事务或需快速执行无依赖更新的场景,但错误处理粒度较粗。

1、将每条 UPDATE 语句拼接为字符串,用分号分隔,例如:UPDATE logs SET level=’warn’ WHERE id=101; UPDATE logs SET level=’error’ WHERE id=102;

2、调用 mysqli->multi_query($sql),然后循环调用 mysqli->next_result() 跳过结果集。

3、注意:无法对单条语句做参数绑定,必须提前过滤或转义所有输入值,否则存在 SQL 注入风险。

五、使用 PDO 预处理 +execute 批量绑定

该方法结合预处理语句与循环 execute,兼顾安全性与可控性,适合中小批量(数百条内)且需严格参数校验的更新任务。

1、定义通用 UPDATE 模板,如:UPDATE items SET title = ?, updated_at = NOW() WHERE id = ?

2、调用 PDO::prepare()获取 PDOStatement 对象。

3、遍历数据数组,每次调用 execute()传入对应参数,例如:[$row[‘title’], $row[‘id’] ]

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-27发表,共计1749字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources