【问题标题】:CodeIgniter - active record - consecutive queries and timeCodeIgniter - 活动记录 - 连续查询和时间
【发布时间】:2014-08-02 06:42:07
【问题描述】:

我在模型中有这段代码:

$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 中进行测试。

【问题讨论】:

  • $this->db->affected_rows() 总是返回受上次查询影响的行数......如果更新/插入查询不影响任何行,则返回“0”

标签: codeigniter codeigniter-2


【解决方案1】:

$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,因为您在数据库上传递了相同的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多