CodeIgniter - 活动记录 - 连续查询和时间

时间:2014-08-02 06:42:07

标签: codeigniter codeigniter-2

我在模型中有这个代码:

$this->db->insert($this->transaction_tbl, $data);
if($this->db->affected_rows() == 1){
   $new_balance = $result['balance'] + $data['amount'];
   $this->db->update($this->account_tbl, array('balance' => $new_balance), array('id' => $data['account_id']));
   if($this->db->affected_rows() == 1){
       return $data;
   }
}
return "error";

代码正在执行它应该做的事情(创建新的存款交易并更新帐户余额)。

我的问题是:如果在insert之后和if之前发生了另一次插入/更新查询(并且不影响任何行)会怎么样? $this->db->affected_rows()仍会返回1并继续正确更新吗?

换句话说:即使在它们之间出现新的连续查询,也会连续执行2或3次查询?

如果答案如下: 因为$this->db是一个不同的实例,所以它不会受到影响然后抱歉你的时间阅读一个不那么聪明的问题。

我不熟悉数据库中时间和优先级的概念,所以我不确定问题是否甚至是关于codeigniter活动记录或具有类似问题的一般数据库问题

如果重要的话,我在mysql中测试它。

1 个答案:

答案 0 :(得分:0)

$this->db->affected_rows();始终返回受影响行的值,但如果它不影响任何行,则返回0。如果你在这样的更新查询中发送数据

$data = array(
   "title"=>"the title",
   "content"=>"the content"

);
$this->db->where('id', 101);
$this->db->update('mytable', $data); 

并在您的数据库中

+-----+----------+------------+
|id   | title    |content     |
|-----------------------------|
|101  | the title| the content|
|-----------------------------|
|102  | any      | any        |
|-----------------------------|

$this->db->affected_rows();也返回0,因为您在数据库上传递了相同的值。