【问题标题】:Using pdo execute and commit for mutiple http requests对多个 http 请求使用 pdo 执行和提交
【发布时间】:2026-01-27 17:30:01
【问题描述】:

这是一个来自 php.net 的 pdo 执行和提交示例

<?php
/* Begin a transaction, turning off autocommit */
$dbh->beginTransaction();

/* Insert multiple records on an all-or-nothing basis */
$sql = 'INSERT INTO fruit
    (name, colour, calories)
    VALUES (?, ?, ?)';

$sth = $dbh->prepare($sql);

foreach ($fruits as $fruit) {
    $sth->execute(array(
        $fruit->name,
        $fruit->colour,
        $fruit->calories,
    ));
}

/* Commit the changes */
$dbh->commit();

/* Database connection is now back in autocommit mode */
?>

据我了解,这使我能够更快地在表中插入数千行。现在,如果我有一个名为的 php 文件 http://localhost/insertFruit.php?name=x&color=y&calories=z 它基本上收集这些值并将它们插入数据库。

现在,如果我想利用该 PDO 循环并执行,我不能。如果有 100 个这些 insertFruit.php 提交,我如何收集所有这些值,组合成一个数组然后提交?使用单独的类、调用对象、使用全局值等?

我确信有更好的方法来做到这一点。

【问题讨论】:

  • 为什么您认为它可以让您更快地在表中插入数千行?我想你可能会有点困惑,这不是它的工作原理。

标签: php pdo


【解决方案1】:

我如何收集所有这些值,组合成一个数组然后提交?

虽然可以,但不应该。

事务和准备好的语句都不适合单独的请求。

更不用说您最初的问题是毫无根据的。您不需要更快的插入。您的插入速度已经很快。

没有“更好”的方法。过早的优化是万恶之源。如果试图设计一种“更好”的方式,你会毁掉整个系统。

您所能做的就是将一些数据聚集到单个请求中。如果一个请求中有多个结果,可以使用prepared statements循环处理。

【讨论】: