CodeIgniter - 使用事务的多个表插入

时间:2012-11-17 12:13:27

标签: php codeigniter

我目前正在关注在PHP / MySQL中创建论坛的教程......我试图将它实现到我的CodeIgniter项目中。

我遇到了以前从未处理过的问题,交易......我已经阅读了有关codeigniters交易的文档,但考虑到我需要转换的代码,我并没有真正理解它。

我想知道是否有人可以使用下面的代码并将其转换为codeigniters事务代码,我已尝试自己做,但它使用多个表格,我只是完全混淆。

任何帮助都会很棒,代码如下:

$query = "BEGIN WORK;";
$result = mysql_query($query)

if(!$result) {
    echo 'An error has occured';
} else {
    $sql = "INSERT INTO topics(t_subeject,date,cat) VALUES ($_POST['subject'],NOW(),$_POST['cat'])";
    $result = mysql_query($sql);

    if(!$result) {
        echo 'An error has occured';
        $sql = "ROLLBACK;";
        $result = mysql_query($query)
    } else {
        $topid = mysql_insery_id();
        $sql = "INSERT INTO posts(content, date) VALUES ($_POST['content'],NOW())";
        $result = mysql_query($sql);

        if(!$result) {
            echo 'An error has occured';
            $sql = "ROLLBACK;";
            $result = mysql_query($sql);
        } else {
            $sql = "COMMIT;";
            $result = mysql_query($sql);
            echo 'Insert successful!';
        }
    }
}

1 个答案:

答案 0 :(得分:2)

如果INSERT失败,它将自动执行ROLLBACK。这就是你首先使用交易的原因。无需明确检查。所以最后,这应该是它的全部内容:

$this->db->trans_start();
$this->db->query("INSERT INTO topics(t_subeject,date,cat) VALUES ($_POST['subject'],NOW(),$_POST['cat'])");
$topid=$this->db->insert_id();
$this->db->query("INSERT INTO posts(content, date) VALUES ($_POST['content'],NOW())");
$this->db->trans_complete();

...来自您的模型类。因此,如果第一个INSERT已经失败,它将不会执行第二个。

http://ellislab.com/codeigniter/user_guide/database/transactions.html