在 codeigniter 中查询“选择更新”
Posted
技术标签:
【中文标题】在 codeigniter 中查询“选择更新”【英文标题】:query "select for update" in codeigniter 【发布时间】:2015-02-02 01:32:56 【问题描述】:我有查询 = SELECT @condi:=id FROM table WHERE id>1 LIMIT 1 for UPDATE; UPDATE table set aa="ok" WHERE id=@condi
我使用了$this->db->query(query)
但codeigniter 信息错误
“您的 SQL 语法有错误;请查看与您的 mysql 服务器版本相对应的手册,以在第 1 行的 'update table set aa="ok" where id=@condi' 附近使用正确的语法”
错过“;”
我使用 phpmyadmin 执行此查询,结果行正确而不是错误查询
也许核心codeigniter错误你能帮我在codeigniter中执行我的查询吗,谢谢
【问题讨论】:
$this->db->query(query) 更改为 $this->db->query($query) 据我所知,codeigniter 的活动记录不支持 SELECT FOR UPDATE 语句。所以可能唯一的解决方案是使用 query() 函数并构建自己的语句。 【参考方案1】:您可以尝试使用查询生成器来防止 SQL 错误:
$query = $this->db->select()
->from('table')
->where('id >', 1)
->limit(1)
->get_compiled_select();
$data = $this->db->query("$query FOR UPDATE")->row_array();
$this->db->where('id', $condi)->update('table', ['aa'=>'ok']);
因为 Codeigniter 3 builder 不支持FOR UPDATE
,所以我只使用编译器重建查询。
代码点火器get_compiled_select()
yidas/codeigniter-model - Pessimistic Locking
【讨论】:
以上是关于在 codeigniter 中查询“选择更新”的主要内容,如果未能解决你的问题,请参考以下文章
codeigniter 中是不是有子查询库?或者我如何在codeigniter 3中进行子查询?