请问如何手动回滚事务啊?
执行一条SQL查询:删除 ID IN (1,2,3,18,97)的文章。我想等删除完成后再检查是不是删除了这些文章($this->db->affected_rows();),如果1,2,3,18,97其中有一个文章没删,则提示指定的文章ID数组有错误,并回滚操作。
请问要怎么写啊?
能不能用类似下面的方法写出来?在哪地方写成败判断及回滚操作?
$this->db->trans_start();
$this->db->query($sql_del); //执行删除操作(当然我知道把ID一条一条的删写在这里肯定行的。就不知道效率与IN相比哪个更好些)
$this->db->trans_complete();
本帖最后由 muneo 于 2013-7-29 12:58 编辑
??事务,我记得好像是只要你不complete,他就自动回滚呀,如果数据库服务器没有设置auto_complete 手册上说affected_rows在mysql中delete返回值是0;
其实如果当其中有一条记录不能删除,回滚,也就是说其中有一条删除不成功,其他的也都不删除了。也没必要循环或者用in,我用个最笨的办法。
$sql = '';
$this->db->trans_begin();
foreach(...){
$sql .= "delete ....";//拼接语句,如果数量不大的话
}
$this->db->query($sql);
if ($this->db->trans_status() === FALSE){
$this->db->trans_rollback();
}else{
$this->db->trans_commit();
}
其实我一直在纠结和楼主一样的问题....一直没找到比较合适的办法
affected_rows默认是可用的!
所以放心用就可以了!
不信你可以测试一下!
database 类有一个小 hack 允许返回正确的被影响的行数。默认情况下这个 hack 功能是打开的但可以在数据库驱动文件中关闭它。
页:
[1]