与几乎所有“如何在PHP中执行SQL”问题一样,您实际上应该使用准备好的语句。这并不难:

$ids = array(2, 4, 6, 8);

// prepare an SQL statement with a single parameter placeholder $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?"; $stmt = $mysqli->prepare($sql);

// bind a different value to the placeholder with each execution for ($i = 0; $i < count($ids); $i++) { $stmt->bind_param("i", $ids[$i]); $stmt->execute(); echo "Updated record ID: $id\n"; }

// done $stmt->close(); 或者,您可以这样做:

$ids = array(2, 4, 6, 8);

// prepare an SQL statement with multiple parameter placeholders $params = implode(",", array_fill(0, count($ids), "?")); $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)"; $stmt = $mysqli->prepare($sql);

// dynamic call of mysqli_stmt::bind_param hard-coded eqivalent $types = str_repeat("i", count($ids)); // "iiii" $args = array_merge(array($types), $ids); // ["iiii", 2, 4, 6, 8] call_user_func_array(array($stmt, 'bind_param'), ref($args)); // $stmt->bind_param("iiii", 2, 4, 6, 8)

// execute the query for all input values in one step $stmt->execute();

// done $stmt->close(); echo "Updated record IDs: " . implode("," $ids) ."\n";

// ---------------------------------------------------------------------------------- // helper function to turn an array of values into an array of value references // necessary because mysqli_stmt::bind_param needs value refereces for no good reason function ref($arr) { $refs = array(); foreach ($arr as $key => $val) $refs[$key] = &$arr[$key]; return $refs; } 根据需要为其他字段添加更多参数占位符。

选哪一个?

第一种变体可迭代处理可变数量的记录,从而多次访问数据库。这对于UPDATE和INSERT操作最有用。

第二种变体也适用于可变数量的记录,但是它只命中一次数据库。这比迭代方法高效得多,显然,您只能对所有受影响的记录执行相同的操作。这对于SELECT和DELETE操作,或者要更新具有相同数据的多条记录时最有用。

为什么要准备陈述?

预备语句更安全,因为它们使SQL注入攻击变得不可能。这是使用准备好的语句的主要原因,即使编写它们是更多的工作。养成明智的习惯:即使您认为“不是真的”,也要始终使用准备好的语句。疏忽会来咬你(或你的顾客)。 与将多个完整的SQL字符串发送到数据库相比,以不同的参数值多次重复使用同一条准备好的语句效率更高,因为数据库只需要编译一次该语句即可,并且也可以重新使用它。 仅将参数值发送到上的数据库execute(),因此当重复使用时,需要较少的数据通过网络。 在更长的循环中,使用准备好的语句和发送纯SQL之间的执行时间差异将变得明显。来源:stack overflow

php一次性执行多条sql_PHP循环执行多条SQL相关推荐

  1. python测试框架untest怎么循环执行_unittest如何在循环遍历一条用例时生成多个测试结果...

    引用自:http://blog.csdn.net/kaku21/article/details/42124593 参考网址:http://programmaticallyspeaking.com/te ...

  2. MFC创建处理中进度条,循环滚动进度条的方法

    创建一个不显示实际进度的循环滚动进度条,类似于Windows XP启动界面的进度条 新建一个MFC项目TestProgress,编辑界面,添加一个进度条,两个按钮,实现点击start进度条循环滚动,点 ...

  3. cron 每年执行一次_循环执行定时任务crontab

    一.前言 小编最近在将线上服务器实时的请求都转到测试机,但是由于请求量太多导致log不久就写满磁盘了,手动清理费事费力,因此考虑到自动清理,接触到corntab定时任务.分享给各位. 二.crond介 ...

  4. Linux上使用at单一执行例行性工作,使用crontab循环执行例行性任务以及系统例行任务

    在工作或学习中,我们经常需要对重要的文件进行备份,或者做一些日常性的排查等工作,了解如何在linux上执行例行性工作显得尤为重要! 本文基于Linux上CentOS 7版本进行演示 一.单一执行例行性 ...

  5. 定时任务每秒执行、每分钟执行、每小时执行、每天执行、每周执行、每月执行、每年执行、定时任务重复执行、循环执行

    在平时生活.系统运维.实验室.学校等场景下,有很多定期循环执行任务的需求.比如:在系统运维过程中,常常会在每天凌晨1点以后执行某些批处理脚本:在实验室做实验过程中,需要每隔10分钟去操作一下设备等等. ...

  6. linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项

    原标题:Linux shell脚本使用while循环执行ssh的注意事项 如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了. 一.场景还原 ...

  7. navicat循环执行上下两行相减sql语句_SQL语句的优化分析

    一.开门见山,问题所在 sql语句性能达不到你的要求,执行效率让你忍无可忍,一般会时下面几种情况. 网速不给力,不稳定. 服务器内存不够,或者SQL 被分配的内存不够. sql语句设计不合理 没有相应 ...

  8. 如何用循环执行玩转自定义企业微信机器人?

    "如何在企业微信里定时发送销售日报啊?" "我们的报餐系统很不好用,你们有合适的模板吗?" "根据报餐.销售来实现不同的报表推送,你们可以做到吗&qu ...

  9. MySql 循环执行语句,循环执行update,详细介绍【游标嵌套】

    今天在工作的时候,遇到一个需求. 需要去把一个字段(原本是uuid),改成00001,00002,这样的格式.如果是数据比较少当然无所谓了,但是表里面有上千条数据,这个时候再去手动修改就不科学了. 本 ...

最新文章

  1. 马斯克放话:6个月内公测卫星互联网!颠覆5G的将不是6G
  2. 5 怎么上下分屏_oppo的最新手机reno5系列怎么样
  3. oracle中保留2位小数的写法
  4. [C# 网络编程系列]专题九:实现类似QQ的即时通信程序
  5. ROS下的多参数调用,boost::bind使用
  6. PMP学习系列5:PMBOK(5th)第三章-项目管理过程
  7. 【阙值分割】基于matlab粒子群算法自适应多阈值图像分割【含Matlab源码 1459期】
  8. VUE 完整项目构建 (1) -- 初始化
  9. cmd命令打开文本文档_Windows常用cmd命令总结
  10. 计算机英语emulated,【英语词汇】 imitate、mimic、mock、 simulate、emulate 这组词都有...
  11. 蓝桥杯官网练习系统基础练习(一)
  12. PyQt5 QThread应用
  13. 模电七:集成运算放大器(上)
  14. 生意的本质:低买高卖
  15. 根据生日自动计算年龄
  16. RocketMQ 延迟消息解析——图解、源码级解析
  17. 魔兽争霸3冰封王座 对战初始化被禁止
  18. BGP路由器协议排错教程:BGP 对等体翻动问题
  19. BufferedImage 图片打水印
  20. 【flask入门系列】请求钩子与上下文

热门文章

  1. CSS使用display:incline:元素放置在一行之内
  2. java输入hello_详解JAVA输出Hello World
  3. 浏览器渲染机制面试_面试官不讲码德,问我Chrome浏览器的渲染原理(6000字长文)...
  4. docker -v 覆盖了容器中的文件_10分钟让你理解 docker 容器中的 uid 和 gid
  5. mysql生产环境运维方案_[MySQL生产环境] Innodb存储引擎内存报警问题处理过程
  6. html mvc 分页 保存,Asp.net Mvc3 加载cshtml文件自定义分页+ 查询
  7. 拷贝依赖_还不懂零拷贝(Zero-Copy)?怎么称得上高级程序员
  8. stl源码剖析_《STL源码剖析》学习笔记——空间配置器
  9. 软件测试性能测试结果,软件性能测试结果分析工具的研究与设计
  10. 用python做公众号网页_Python---微信公众号或网页自动导出