设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
CodeIgniter 开发
›
CodeIgniter 问答求助
›
请问如何手动回滚事务啊?
返回列表
查看:
2132
|
回复:
3
[HELP]
请问如何手动回滚事务啊?
[复制链接]
couth
couth
当前离线
积分
37
IP卡
狗仔卡
发表于 2013-7-29 10:26:44
|
显示全部楼层
|
阅读模式
执行一条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
muneo
当前离线
积分
139
IP卡
狗仔卡
发表于 2013-7-29 12:57:14
|
显示全部楼层
本帖最后由 muneo 于 2013-7-29 12:58 编辑
??事务,我记得好像是只要你不complete,他就自动回滚呀,如果数据库服务器没有设置auto_complete
回复
支持
反对
使用道具
举报
显身卡
流浪的乞丐
流浪的乞丐
当前离线
积分
398
IP卡
狗仔卡
发表于 2013-7-29 18:06:28
|
显示全部楼层
手册上说affected_rows在mysql中delete返回值是0;
其实如果当其中有一条记录不能删除,回滚,也就是说其中有一条删除不成功,其他的也都不删除了。也没必要循环或者用in,我用个最笨的办法。
PHP
复制代码
$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
(
)
;
}
复制代码
其实我一直在纠结和楼主一样的问题....一直没找到比较合适的办法
回复
支持
反对
使用道具
举报
显身卡
xingis
xingis
当前离线
积分
143
IP卡
狗仔卡
发表于 2013-9-24 21:56:29
|
显示全部楼层
affected_rows默认是可用的!
所以放心用就可以了!
不信你可以测试一下!
database 类有一个小 hack 允许返回正确的被影响的行数。默认情况下这个 hack 功能是打开的但可以在数据库驱动文件中关闭它。
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页