两个插入,两个表,一个PDO事务,双SQL结果[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个插入,两个表,一个PDO事务,双SQL结果[重复]相关的知识,希望对你有一定的参考价值。

编辑我不相信这是一个关于mysqli问题的重复问题,并且相信它应该是一个独立的问题。

因此,我正在尝试使用PDO事务从表单中获取一些数据到正确的表中(这对我来说是新的)。

SQL正确插入表中,但加倍。所以我最终在每个表中得到了双重结果。

我读到由于favicon而页面刷新两次出现问题,或者这是一个浏览器问题。但即使重新启动服务器和多个浏览器,我认为这只是我的代码。

try {
    //$mysqli->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $mysqli->begin_transaction();

    $stmt = $mysqli->prepare("INSERT $table1 (status, customer, product, ord_num, return_code, dop, sn, problem_descr, repair_descr, comments) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("ssssssssss", $status, $customer, $product, $ord_num, $return_code, $dop, $sn, $problem_descr, $repair_descr, $comments);
    $stmt->execute();
    if (!$stmt->execute()) {
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }
    $stmt->close();

    $stmt = $mysqli->prepare("INSERT $table2 (part1, part2, part3, part4, part5, part6, part7, part8, part9, part10, part11, part12, part13, part14, part15, part16, part17, part18, part19, part20) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("ssssssssssssssssssss", $part1, $part2, $part3, $part4, $part5, $part6, $part7, $part8, $part9, $part10, $part11, $part12, $part13, $part14, $part15, $part16, $part17, $part18, $part19, $part20);
    $stmt->execute();
    if (!$stmt->execute()) {
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }
    $stmt->close();

    $mysqli->commit();
} catch(PDOException $ex) {
    //Something went wrong, rolback!
    $mysqli->rollBack();
    echo $ex-getMessage();
}
答案

这需要改变:

$stmt->execute();
        if (!$stmt->execute()) {

只是

if (!$stmt->execute()) {

足够。

一旦你运行$stmt->execute();,然后再将它放在if语句中以查看它是否返回true,你最终会执行两次语句。您正在为此看到双重条目。

另一答案

或者你可以这样做

$run = $stmt->execute();
if (!$run) {

我们只需要运行一次execute语句。

以上是关于两个插入,两个表,一个PDO事务,双SQL结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP使用PDO进行事务处理

尝试合并 SQL 查询的两个结果 - ToDoList App

使用 Zend 框架 2 将数据插入和更新到两个表(事务)中

通过 PDO 将 & 号插入 SQL 表

FMDB事务的使用

sql如何将两个表里的数据同步?