【问题标题】:Two queries in one transaction with rollback一个事务中的两个查询并回滚
【发布时间】:2016-02-07 14:34:24
【问题描述】:

如果两个查询中的一个失败,我想取消这两个查询,我的测试是否执行第一个查询,尽管第二个查询搁浅

public function testCommit(){

        $host = "localhost";
        $db = "agm_gs";
        $user = "root";
        $password = "";
        $conn;
        $conn = new mysqli($host, $user, $password, $db);

        $sql1 = 'INSERT INTO livreur (id_livreur, code_livreur, nom_livreur, pre_livreur)  VALUES (NULL, \'L001\', \'nom1\', \'pre1\')';
        $sql2 = 'INSERT INTO otherTable XXXXXXXXXXincorrect queryXXXXXXXX';

        try
        {
            $conn->begin_transaction();
            $conn->autocommit(FALSE);

            $conn->query($sql1);
            $conn->query($sql2);

            $conn->commit();
            echo 'Sucess transaction';
        }
        catch(PDOException $e)
        {
            $conn->rollback();
            echo ' Error transaction <br />' . $e->getMessage();
        }
}

这是我插入的结果

【问题讨论】:

    标签: mysql transactions try-catch commit rollback


    【解决方案1】:

    试试这个:-

    $sql1 = 'INSERT INTO livreur 
    id_livreur, code_livreur, nom_livreur, pre_livreur)  
    VALUES (NULL, \'L001\', \'nom1\', \'pre1\'),
    (NULL, \'L002\', \'nom2\', \'pre2\')';
    

    使用 VALUES 语法的 INSERT 语句可以插入多行。到 这样做,包括多个列值列表,每个包含在 括号并用逗号分隔。

    【讨论】:

    • 我已经对此进行了测试....但是如果两个不同的表都在两个不同的表上 requettes 例如 $sql1 = 'INSERT INTO livreur (id_livreur, code_livreur, nom_livreur, pre_livreur) VALUES (NULL, \' L001\', \'nom1\', \'pre1\')';和 $sql2 = 'INSERT INTO otherTable(id_livreur, code_livreur, nom_livreur, pre_livreur) VALUES (NULL, \'L002\', \'nom2\', \'pre2\')';
    • 在这种情况下使用 2 个不同的插入查询 @isom
    • 是的,我使用了 2 个不同的插入查询,但如果第二个不成功,我想取消第一个
    • 在这种情况下,如果第二个不成功。删除第一个表上的插入记录
    • 谢谢,但我想在 catch 块中自动回滚
    猜你喜欢
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多