用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2174|回复: 3
收起左侧

[已解决] 我的这个代码为什么没有回滚?

[复制链接]
发表于 2013-2-20 17:25:15 | 显示全部楼层 |阅读模式
PHP代码:
PHP复制代码
 
        $this->db->trans_start();
        $this->db->query("INSERT INTO `cdb_user_log` (`uid`, `type`, `ip_address`, `content`, `dateline`) VALUES (2921538, 0, '123', 'content', 1361351834)");
        $this->db->query("UPDATE `cdb_user_log` SET `ip_address` = '192.168.0.118', `content` = 'set', `dateline` = 1361351863 WHERE `uid` < 1");
        $this->db->trans_complete();
 
        if ($this->db->trans_status() === FALSE)
        {
            $this->db->trans_rollback();
        }
        else
        {
            $this->db->trans_commit();
        }
 
复制代码

数据库:
SQL复制代码
 
CREATE TABLE `cdb_user_log` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`uid` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',`type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',`ip_address` VARCHAR(45) NOT NULL DEFAULT '',`content` VARCHAR(255) NOT NULL DEFAULT '',`dateline` INT(10) UNSIGNED NOT NULL DEFAULT '0',PRIMARY KEY (`id`),INDEX `uid` (`uid`))COLLATE='utf8_general_ci'ENGINE=InnoDB;
复制代码

请指点一下,谢谢~~
 楼主| 发表于 2013-2-21 08:34:30 | 显示全部楼层
本帖最后由 longjianghu 于 2013-2-21 09:42 编辑

我改成这个样子是可以回滚的
PHP复制代码
 
        $this->db->trans_start();
        $this->db->query("INSERT INTO `cdb_user_log` (`uid`, `type`, `ip_address`, `content`, `dateline`) VALUES (2921538, 0, '123', 'content', 1361351834)");
        $this->db->query("UPDATE `cdb_user_log` SET `ip_address` = '192.168.0.118', `content` = 'set', `dateline` = 1361351863 WHERE `uid` < 1");
        $this->db->trans_rollback();        
        $this->db->trans_complete();
 
复制代码

不明白为什么$this->db->trans_status()一直是TRUE
发表于 2013-2-21 09:50:47 | 显示全部楼层
$this->db->trans_complete(); 会自动判断SQL是否成功,不成功自动回滚。
只要SQL执行成功就不会回滚了,所以你这个不会回滚。
 楼主| 发表于 2013-2-21 09:53:55 | 显示全部楼层
解决了,应该是理解问题。看来还是要手动运行事务

本版积分规则