php - 在 For 循环中运行查询

标签 php mysql pdo

我正在尝试删除某些代码中 for 循环中正在运行的 MySQL 查询。

但我不确定如何最好地实现这一目标。

使用带有命名参数的 PHP PDO,如何存储查询,然后在循环后批量运行它们?所以 for 循环中发生的唯一事情是构建查询,但直到循环完成后才执行?

这里是示例代码:

for($i=$rowcount; $i>0; $i--){ 
    $id = $array[$i];
    $query  = "DELETE FROM table WHERE ID=:id AND Order=:order";
    $stmt = $conn->prepare($query);
    $stmt->execute(array('id' => $id, 'order' => $i));
}

最佳答案

我的第一 react 是:为什么要这样做?你的动机是什么?只是避免循环中的 SQL,或者您是否有某种想要避免的操作问题?

您的精确查询不会那么容易转换为单个查询,因为您确实有 ID 的元组和 Order必须匹配才能删除的值。另请注意,准备好的语句通常不接受任意数量的参数,因此即使您能够将查询转换为 DELETE FROM table WHERE (ID=1 AND Order=1000) OR (ID=4 AND Order=1234)... 形式,您必须以某种方式弄清楚如何填充第一个,第二个,第三个......占位符。此外,您将被迫动态生成准备好的语句,这可能与安全性方面应如何完成准备好的语句相反。

如果您遇到性能问题,因为逐个删除 1000 个条目会产生很大影响,那么还有其他选择:如果您将删除操作包含在一个事务中,那么删除多少条目可能并不重要 -一旦事务提交,所有这些都将被删除。另请注意,使用准备好的语句是加速数据库操作的一种方法 - 但前提是您仅在循环之前准备一次,并且在循环内您只需一次又一次地传递新参数。

总结一下:如果您想要解决的编程问题可以使用循环更好地解决,并且没有其他与之相关的问题,那么在循环中撤消 SQL 并不是最好的事情。然而,如果存在这样的问题,则必须对其进行分析和提及 - 消除循环并不是自动成功的故事。

关于php - 在 For 循环中运行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41988703/

相关文章:

mysql - 如何使用 GROUP_CONCAT 显示用户名?

php - 为 php 安装 wso2 Web 服务时出错

mysql - sql语句中如何有多个AND条件?

php - PHP 变量的 URL 中的问号使链接断开。知道为什么吗?

mysql - SQL 连接一列中的多个值,以逗号分隔

php - pdo_mysql 在 centos 6.7 上不可用

php - 在 PDO 中,如果将 int 引用为字符串,性能会有所不同吗?

PHP PDO 表和单独的按钮

javascript - 根据 Action 添加一个js文件。曾德

php - 快速计算每种产品过去 6、3、1 个月的平均月销售额