我知道此问题已在Update with limit 1 in codeigniter use active record
之前发布但似乎使用Active Record组合UPDATE和LIMIT并不适合我。它仍将基于WHERE子句更新所有记录。我目前正在使用CodeIgniter 3.0.6。这是CodeIgniter的错误吗?
答案 0 :(得分:1)
您不能在更新查询中直接添加限制。我有另一种方法。首先,您需要在哪里查询一行,然后使用获取行唯一键(例如唯一的自动增量ID)来运行更新查询。
$singleInfo = $this->db->get_where($tbl, array('user_id'=>1));
$this->db->update($tbl,array('username'=>'FredSmith'),array('user_id'=>$singleInfo->id));
答案 1 :(得分:0)
我启动了CI 3.0.6并将其用作演示,因为我们无法看到您的设置。
public function db_update_test_with_limit(){
$tbl = 'users';
// Use Chaining - Works
$this->db
->where('user_id',1)
->limit(1)
->update($tbl,array('username'=>'FredSmith'));
echo $this->db->last_query();
// Use discrete calls - Works
$this->db->where('user_id',1);
$this->db->limit(1);
$this->db->update($tbl,array('username'=>'FredSmith'));
echo '<br>';
echo $this->db->last_query();
}
两者的结果都是......
UPDATE `users` SET `username` = 'FredSmith' WHERE `user_id` = 1 LIMIT 1
UPDATE `users` SET `username` = 'FredSmith' WHERE `user_id` = 1 LIMIT 1
因此,如果你正在做同样的事情并得到不同的结果,那么就会发生一些时髦的事情。
如果您使用它作为测试并按摩它以适合您的情况,它是否有效?