nus
为什么要事务呢、
什么事其它不可以处理的呢
真是没事找事做
✘苒荏光时
比如说你要批量修改商品的库存 如果其中有一个库存量不够 其他的库存就应该保持不变 如果不用事务你说怎么做
nus
先做可行性判断啊。
有多少个库存就统一做一次前置判断啊。
判断为真才一次性执行啊。
✘苒荏光时
那样会消耗数据库读写速度 而且有多个循环 系统也就耗时
不过我已经弄好了 没用tp的事务处理 使用原生的事务处理
nus
既然要用事务处理,就用TP的啊
M()->startTrans();
//TODO
增、删、改的操作
成功:M()-&get;commit();
失败:M()-&get;rollback();
✘苒荏光时
不过失败他会提示sql语句错误
我不想错误输出
nus
那你就是真的sql错误
真的sql错误相当于程序语法错误,当然执行不下去。
✘苒荏光时
不是 是库存量小于我要减掉的购买量 会报一个sql错误 意思就减不过
nus
是什么字段类型?
减了之后的数据无法保存,有可能的。
✘苒荏光时
库存量总不能是负的吧 nus
比如,一个整型的字段,你赋予一个字符串,当然报错。
这个是SQL的真正错误。
不是逻辑上的不可执行。
你应该先判断,如果不够减,就返回false,然后直接事务取消。
nus
$User->rollback(); break;
✘苒荏光时
这个是我现在写的事务处理 我是不会tp里的设置异常模式 nus
呵呵,我是猜的,其实是我是一只菜鸟。
不过我认为,你给一个int无符号型的字段赋一个负值,肯定是会报错。是语法的错,不是事务不可执行的错。
你试试先判断原值是否大于要减去的值,如果不够减,就直接调用$pdo->rollBack();
✘苒荏光时
我知道是语法错误 但我不想让他以严重错误展现 倒着php执行脚本终端 所以用try和pdo异常模式 如果出现错误 会抛出 而不是脚本终端
nus
你看看这个无符号int型的范围:unsigned能存储的数据范围则是0~65535(这个最高位不用做符号位,所以是2的16次方,一共65536)
哪里容得下负数、
哦,那就是try的问题了。
你可以在try里写一个抛出异常试试
✘苒荏光时
tp没有setAttribute
不会设置tp里的setAttribute
星星
sun老师,推荐个tp进阶学习的地方,博客什么的 nus
你出错的问题是 catch (\PDOException $e) 这个地方
你改成catch (\Exception $e) 这个地方
就OK了
✘苒荏光时
我没有错!!!!已经测试好了 nus
又测试好了?什么意思没改动吗? ✘苒荏光时
好尴尬。。。我是不会用tp做事务 不是说不会用原生的pdo做事务 nus
原生的当然可以。
我们是要找出TP为什么捕捉不到异常
nus
我觉得有两个可能:一个是不能有php error ,二个是捕捉的异常类型要写对,可以直接写根异常类\Exception
nus
?星星 你上次不是说可以快速仿站的吗?
我花了3个星期才仿得了的站,你居然说一周内可以完成。
nus
有人需要啊
没有意思也得做
需要总得到满足,这个社会才能和谐。
星星
比如,兽欲 nus
所以,禁不绝
总有人从事
?时光荏苒✘ 这个里有个文章是关于tp的异常处理的,http://www.thinkphp.cn/topic/23939.html
好像是要新建一个模型,并定义行为。
✘苒荏光时
666 就服你 我看看