PDO->exec()修改数据时若数据未改变,将修改失败。

php中文网
发布: 2016-06-23 13:15:13
原创
1507人浏览过

pdo->exec()修改数据时若数据未改变,将修改失败。返回是0,而我用改回的0来判断数据是否修改在功,但问题来了,当我用事务同处理多个表时,有的表会修改数据,而有的表则不会被修改。其中一个表的数据未被改动的话就会导至整个事务失败而执行抛出异常语句,导致回滚修改失败。有什么办法能解决这个问题?

	try {		$db->begintransaction();	//事务开始		$updatenews=$db->update(dbi('prefix').'news',$arrnews,'id',$id);		if($updatenews!==false){			echo '<br />新闻标题表修改成功。';		}else{			throw new pdoexception('异常:新闻标题表修改失败。');		//抛出异常		}		$updateconnent=$db->update(dbi('prefix').'newsconnent',$arrconnent,'newsid',$id);		if($updateconnent!==false){			echo '<br />新闻内容表修改成功。';		}else{			throw new pdoexception('异常:新闻内容表修改失败。');		//抛出异常		}		$db->commit();		//成功,提交。	} catch (pdoexception $e) {		echo '编辑失败:'.$e->getmessage();		$db->rollback();		//失败,回滚	}
登录后复制

图改改
图改改

在线修改图片文字

图改改 455
查看详情 图改改


回复讨论(解决方案)

PDO::exec() 执行 update 时返回 0 的原因有:
1、不存在指定条件的记录
2、被修改字段的内容与待修改的内容相同
PDO::exec() 返回 false 的原因是:sql 指令时错误的

不知道你的 $DB->Update 是怎么写的,为什么会判断 $updateNews!==FALSE

你给出的代码是同时修改 标题 和 内容,但事实上这种情况时极少出现的

PDO::exec() 执行 update 时返回 0 的原因有:
1、不存在指定条件的记录
2、被修改字段的内容与待修改的内容相同
PDO::exec() 返回 false 的原因是:sql 指令时错误的

不知道你的 $DB->Update 是怎么写的,为什么会判断 $updateNews!==FALSE

你给出的代码是同时修改 标题 和 内容,但事实上这种情况时极少出现的



PDO::exec() 执行 update 时返回 0 的原因有:
1、不存在指定条件的记录
2、被修改字段的内容与待修改的内容相同
PDO::exec() 返回 false 的原因是:sql 指令时错误的

不知道你的 $DB->Update 是怎么写的,为什么会判断 $updateNews!==FALSE

你给出的代码是同时修改 标题 和 内容,但事实上这种情况时极少出现的



内容和标题是分表的,以前用mysqli时似乎没有这样的问题。这次想用事务来处理存储修改两个表。
封装的$DB->Update()方法里当exec()返回0的时候,将被认为是修改失败,$DB->Update()返回的就是FALSE,否则返回的是影响条数。在处理单表的时候,这似乎没什么问题,因为数据表肯定要修改,但作为事务的时候,发现如果其中一表未被修改,也就是返回了0,我封装的方法会被认为是修改失败的,就会抛出异常导至回滚。是不是这种情况不该用事务?但是我觉得这个问题不解决,似乎以后还会是问题。肯定有要修改的数据与源数据偶尔出现相同的时候。
目前用笨方法可以解决,就是在内容表和标题表中都加个时间字段,每次存储的时候都会更新这个LastTime时间。也就解决了存储失败的问题,但不知在程序上是否有更好的方法。

加上修改时间是对的,符合业务流程
但是,只修改标题或只修改内容也是经常发生的
其实标题与内容并没有强联系(实际是用 id 建立联系的)
所以修改不需要使用事务,插入和删除才需要使用事务

加上修改时间是对的,符合业务流程
但是,只修改标题或只修改内容也是经常发生的
其实标题与内容并没有强联系(实际是用 id 建立联系的)
所以修改不需要使用事务,插入和删除才需要使用事务



谢谢,非常感谢。
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号