在 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 中控制器或模型中的 CRUD

codeigniter 中是不是有子查询库?或者我如何在codeigniter 3中进行子查询?

如何从原始查询中获取 sql 结果

MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作

在 codeigniter 中搜索查询

使用 PHP/CodeIgniter 在 MySQL 中获取最后执行的查询