PDO->exec()修改数据时若数据未改变,将修改失败。
try { $DB->BeginTransaction(); //事务开始 $updateNews=$DB->Update(DBI('Prefix').'news',$arrNews,'ID',$ID); if($updateNews!==FALSE){ echo '
新闻标题表修改成功。'; }else{ throw new PDOException('异常:新闻标题表修改失败。'); //抛出异常 } $updateConnent=$DB->Update(DBI('Prefix').'newsconnent',$arrConnent,'NewsID',$ID); if($updateConnent!==FALSE){ echo '
新闻内容表修改成功。'; }else{ throw new PDOException('异常:新闻内容表修改失败。'); //抛出异常 } $DB->Commit(); //成功,提交。 } catch (PDOException $e) { echo '编辑失败:'.$e->getMessage(); $DB->Rollback(); //失败,回滚 }
回复讨论(解决方案)
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 建立联系的)
所以修改不需要使用事务,插入和删除才需要使用事务
谢谢,非常感谢。
上一篇: PHP检测当前字符编码并转码
下一篇: PHP中输出缓冲_PHP教程