如果其中一个插入语句失败,如何从数据库中删除数据

时间:2015-11-18 04:32:32

标签: php html ajax

我有5个输入和一个html表。我需要检查html表中的复选框,这样我就需要遍历表并获取数据。 5个输入和html表上的数据是相关的,所以如果其中一个insert语句失败,这将是一个问题。

到目前为止验证输入并检查html表复选框是否有效,但是如果我的一个insert语句失败了怎么办?话虽这么说,如果失败,我需要删除插入的数据。

这是我网站的结构:

  1. 验证输入
  2. 循环显示html表格,其中选中了复选框
  3. 此处调用insert
  4. 的AJAX代码
  5. if声明此处以检查复选框是否已选中
  6. if是的然后是 - > AJAX代码在这里 - >拨打另一个insert声明
    else - >没有要保存的数据,因为输入和html表值彼此需要
  7. 更新:

    如果即将使用交易我该怎么办?在我的网站上 我使用两个不同的php文件进行插入。一个在循环中。一个用于5个输入 这是我的代码

    var checkedItems = $('#dataTable input[type="checkbox"]:checked').each(function() {
            $.ajax({
                        type: "POST",
                        url: "insertdocumentsignatory.php",
                        data: ({dtnum: tnum, dsignum: signum})
                    })
                    .done(function (msg) {
                        alert("Data Saved: " + msg);
                    })
            .fail(function() {
                alert( "Posting failed." );
            }); 
            });
        });
        if (!checkedItems.size()) {
            alert ("Nothing checked");
            return;
        }else if (checkedItems.size()) {
    
            $.ajax({
                        type: "POST",
                        url: "insertdocument.php",
                        data: ({dtnum: tnum, ddoctitle: doctitle, ddoctype: doctype, ddoccontent: doccontent, ddocdatefilled: docdatefilled})
                    })
                    .done(function (msg) {
                        alert("Data Saved: " + msg);
                    })
            .fail(function() {
                alert( "Posting failed." );
            });
        }
    

3 个答案:

答案 0 :(得分:2)

您可以在事务中编写插入查询。如果任何插入失败,那么它就可以回滚。

答案 1 :(得分:2)

您应该使用PDO交易。示例事务如下所示:

<?php
    $pdo->beginTransaction();
    $checkbox = 1; // suppose checkbox is checked
    if($checkbox) {
        $insert = $pdo->prepare("INSERT INTO anytable (anyrow) VALUES (?)");
        $insert->bindValue(1, "anyvalue");
        $insert->execute();
        if($insert->rowCount() > 0) {
            $insert2 = $pdo->prepare("INSERT INTO anytable2 (anyrow2) VALUES (?)");
            $insert2->bindValue(1, "anyvalue2");
            $insert2->execute();
            if($insert2->rowCount() > 0) {
                $pdo->commit();
            } else {
                $pdo->rollBack();
            }
        } else {
            $pdo->rollBack();
        }
    }
?>

手动:http://php.net/manual/en/pdo.transactions.php

答案 2 :(得分:2)

交易将确保全部或全部发生。大多数领先的数据库管理系统都支持事务功能。由于您使用的是PHP,我在下面找到了链接,它解释了如何使用PHP + MySql的事务

PHP + MySQL transactions examples