我在模型中有这个代码:
$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中测试它。
答案 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,因为您在数据库上传递了相同的值。