偽造者のトランザクションが、私が期待したとおりに動作しない理由を理解しようとしています。
このトランザクション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 ' を報告します。
$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>";
}
TABLE1は「AAA」で更新されず、TABLE2は「BBB 」で更新されません
しかし、このトランザクションのtrans_status()は、値が ' 55 'のIDがなくても' TRANS SUCCESS ' を報告しますTABLE2 ?!?!:
$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には55のIDがないためです。
何を与える?トランザクション全体が成功するには、 trans_start()とtrans_complete( )の間のすべてが成功する必要があるというのが、トランザクションの背後にある考え方だと思いました。それ以外の場合、トランザクション全体がロールバックされます。
SET と UPDATE でこれを試しましたが、同じ問題があります。最初のdb->query()は変更をコミットして保存し、2 番目のdb->query()は満たされないままにし、trans_status()はそれを成功として報告しますか???
ここで何が欠けていますか?
皆さんありがとう :)
よろしく。