Mysqli总是承诺,即使失败了

时间:2014-07-30 19:12:13

标签: php mysql mysqli

我有4个MySQL INSERT语句进入数据库的各个表,有时其中一个失败,其余的插入垃圾数据。我试图将代码转换为MySQL事务,但它执行与以前相同,没有全部或全部事务,如果特定插入没有失败,则进行所有插入。

$insert="INSERT INTO table STUFF";

//database transaction, completes all insertions or none
try {
    //turn autocommit off and begin transaction
    mysqli_autocommit($connection, false);

    //do insert 1
    $result = mysqli_query($connection,$insert);
    if (!$result) {
        throw new Exception('Error in Insert 1: ' . mysqli_error($connection));
    }

    //do insert2 3 and 4
    ...

    //commit changes upon success
    mysqli_commit($connection);
    echo "records added";

} catch (Exception $e) {

    //rollback upon failure
    mysqli_rollback($connection);
    echo "no records added";
}

1 个答案:

答案 0 :(得分:0)

我试图解决的问题是,有时其中一个插入会失败,我不希望其他插件发生。我最终做的是重组插件,以便它们不会失败。到目前为止,我已经连续几百次插入而没有问题。

问题的根源是我对表模式的误解。