【问题标题】:Multiple INSERTs into 3 tables with PDO使用 PDO 将多个 INSERT 插入 3 个表
【发布时间】:2011-08-06 09:08:23
【问题描述】:

如何使用通过 for 循环生成 SQL 查询的 PDO 执行 3 个不同的表 INSERT,例如

我的脚本非常庞大,因此将其缩小到代码的主要因素。

$date_sql = '';
for($i = 0; $i < count($_POST['date_range']); $i++)
{
    // codez

    $date_sql .= " INSERT INTO dates (date_one, date_two) VALUES('" . $_POST['date_range'][$i] . "', '" . $_POST['date_range_end'][$i] . "'); ";

    // more codez
}

我有 3 for 循环,与我给出的这个循环相同,但不同的 $_POST 值和不同的表:monthsyears。它将从$*_sql 变量生成一个多行SQL 查询。

3个循环完成后,我将3个sql变量连接成一个字符串:

$main_sql = $date_sql . $month_sql . $year_sql;

然后我希望它执行处理它的 SQL 并将值插入表中,如下所示:

$dbh->beginTransaction();

$sth = $dbh->exec($main_sql);

$dbh->commit();

但这是正确、有效的方式吗?

【问题讨论】:

    标签: php mysql sql for-loop pdo


    【解决方案1】:

    您描述的方式会起作用,它将执行三个命令,但由于它们非常小,因此不会对数据库产生太大影响。

    另一种方法是格式化查询,如下所示:

    INSERT INTO dates (date_one, date_two)
    SELECT $_POST['date_range'][0] , $_POST['date_range_end'][0]
    UNION SELECT $_POST['date_range'][1] , $_POST['date_range_end'][1]
    UNION SELECT $_POST['date_range'][2] , $_POST['date_range_end'][2]
    

    【讨论】:

      【解决方案2】:

      不,这不是正确、首选和有效的方法。你想看看 PDO 的预处理语句:pdo->prepare()pdoStatement->bindParam()pdostatement->execute()pdostatement->fetch()

      【讨论】:

        【解决方案3】:

        更多的 PDO 方法是使用准备好的语句。准备好后,只需更改值即可多次执行。

        $sql = "INSERT INTO dates (date_one, date_two) VALUES(:one, :two)";
        $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
        
        for($i = 0; $i < count($_POST['date_range']); $i++) {
           $sth->execute(array(':one' => $_POST['date_range'][$i], ':two' => '$_POST['date_range_end'][$i]));
        }
        

        【讨论】:

        • 使用:one:two等的链接安全吗?是否必须先转义这些值?
        • @lolwut:它们将被 PDO 自动转义,因此不需要进行额外的转义。 $sth-&gt;execute() 将在错误时返回 false,因此您当然需要检查。
        猜你喜欢
        • 1970-01-01
        • 2015-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        相关资源
        最近更新 更多