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

[HELP] 【数据库事务】不懂就要问

[复制链接]
发表于 2014-7-3 18:18:54 | 显示全部楼层 |阅读模式
这两天研究了论坛上和手册上所有关于事务的资料。想问一个问题
事务回滚的触发条件
PHP复制代码
$this->db->trans_begin();
 
$this->db->query('INSERT QUERY...');
$this->db->query('INSERT QUERY...');
$this->db->query('QUERY1');
 
if ($this->db->trans_status() === FALSE)
{
    $this->db->trans_rollback();
}
else
{
    $this->db->trans_commit();
}
复制代码

(1)当QUERY出错时,
SQL复制代码
QUERY1 = UPDATE USER` SET sex` = -1 WHERE `uid` < 1 1
复制代码
ci直接显示语句错误
(2)当插入与当前字段类型不符的类型时,居然trans_status=TURE,并插入了三条数据
(3)当插入一个未定义的变量时
SQL复制代码
QUERY1 = UPDATE [/color][color=#4f5155]USER` SET sex` = -1 WHERE `uid` = $id
复制代码
。  $id故意没申明。ci报错,trans_status居然还是TURE并且插入了前两条数据。。。
ci也用了2年了,感觉已经不小白了吧。。。感觉已经无力了。


当初是因为担心类似上面的$id返回null或是出错才想到要使用事务,因为id是在插入前查询数据得到的。现在看来好像事务只在于停电,死机才有用。。。求大神指教。还有$this->db->trans_start(TRUE); 这个传说中的测试模式一点效果都没有。。。还是插入了数据。是我用的方法不对吗。。。
测试环境为ci2.2.0下的严格模式。

本版积分规则