longjianghu 发表于 2013-2-20 17:25:15

我的这个代码为什么没有回滚?

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();
      }

数据库:

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;
请指点一下,谢谢~~

longjianghu 发表于 2013-2-21 08:34:30

本帖最后由 longjianghu 于 2013-2-21 09:42 编辑

我改成这个样子是可以回滚的

      $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

Hex 发表于 2013-2-21 09:50:47

$this->db->trans_complete(); 会自动判断SQL是否成功,不成功自动回滚。
只要SQL执行成功就不会回滚了,所以你这个不会回滚。

longjianghu 发表于 2013-2-21 09:53:55

解决了,应该是理解问题。看来还是要手动运行事务
页: [1]
查看完整版本: 我的这个代码为什么没有回滚?