3

只是想弄清楚为什么造假者的交易行为不像我预期的那样。


此事务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()将其报告为成功???

我在这里想念什么?

谢谢大家:)

问候。

4

2 回答 2

2

使用此程序。它以某种方式工作^_^

$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'");
if($this->db->trans_status() === FALSE){// Check if transaction result successful
   $this->db->trans_rollback();
   echo "<BR>------- TRANS FAILED -------</BR>";
}else{
   $this->db->trans_complete();
   echo "<BR>------- TRANS SUCCESS -------</BR>";
}
于 2014-07-21T03:25:18.493 回答
2

哪些事务正在寻找成功的查询。您的查询

$this->db->query("SELECT * FROM TABLE2 WHERE ID = 55");

是一个正确的查询,它会相应地运行并返回 0 行。不返回任何行并不意味着查询运行失败。

如果您提供更新查询的示例,它可能会更清楚地说明这个问题。

于 2013-02-05T03:17:20.597 回答