只是想弄清楚为什么造假者的交易行为不像我预期的那样。
此事务trans_status()触发“ TRANS SUCCESS ”:
$this->db->trans_start();
$this->db->query("UPDATE `TABLE1` SET `NAME` = 'AAA' WHERE `ID` = '1'");
$this->db->query("UPDATE `TABLE2` SET `NAME` = 'BBB' WHERE `ID` = '2'");
$this->db->trans_complete();
if($this->db->trans_status() === FALSE){// Check if transaction result successful
echo "<BR>------- TRANS FAILED -------</BR>";
}else{
echo "<BR>------- TRANS SUCCESS -------</BR>";
}
TABLE1更新为“ AAA ”,TABLE2更新为“ BBB ”
此事务trans_status()按预期报告“ TRANS FAILED ”,因为TABLE2中不存在“ errorID ”列:
$this->db->trans_start();
$this->db->query("UPDATE `TABLE1` SET `NAME` = 'AAA' WHERE `ID` = '1'");
$this->db->query("UPDATE `TABLE2` SET `NAME` = 'BBB' WHERE `incorrectID` = '2'");
$this->db->trans_complete();
if($this->db->trans_status() === FALSE){// Check if transaction result successful
echo "<BR>------- TRANS FAILED -------</BR>";
}else{
echo "<BR>------- TRANS SUCCESS -------</BR>";
}
表1未更新为“ AAA ”,表 2 未更新为“ BBB ”
然而,即使没有ID值为 ' 55 ' TABLE2 ?!?! ,此事务trans_status() 仍会报告 ' TRANS SUCCESS ':
$this->db->trans_start();
$this->db->query("UPDATE `TABLE1` SET `NAME` = 'AAA' WHERE `ID` = '1'");
$this->db->query("UPDATE `TABLE2` SET `NAME` = 'BBB' WHERE `ID` = '55'");
$this->db->trans_complete();
if($this->db->trans_status() === FALSE){// Check if transaction result successful
echo "<BR>------- TRANS FAILED -------</BR>";
}else{
echo "<BR>------- TRANS SUCCESS -------</BR>";
}
TABLE1 使用“ AAA ”更新,而TABLE2没有更新,因为TABLE2 上没有ID 55 -但我希望它会回滚,因为TABLE2 UPDATE 不会成功。
是什么赋予了?我认为事务背后的想法是trans_start()和trans_complete()之间的所有内容都必须成功,整个事务才能成功。否则整个事务都会回滚。
我已经用 SET 和 UPDATE 尝试过这个并且有同样的问题。第一个db->query()将提交并保存更改,而第二个db->query()未完成,而trans_status()将其报告为成功???
我在这里想念什么?
谢谢大家:)
问候。