You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter查询算术运算报错,如何正确计算item_price*1.1?

解决CodeIgniter中算术运算查询报错的问题

你的问题出在对SQL标识符和表达式的用法混淆上——你把算术表达式DMI.price * 1.1用反引号括起来了,这会让数据库把它当成一个不存在的列名,自然会报错。下面是两种正确的写法:

方法一:直接编写算术表达式并指定别名

去掉表达式外的反引号,让数据库正确解析计算逻辑:

public function getAllModifiers($condition) {
    $this->db->select('DM.id AS modifier_id, DM.name, minimum, maximum');
    // 移除反引号,直接写计算表达式并设置别名
    $this->db->select('DMI.id AS item_id, DMI.name AS item_name, DMI.price * 1.1 AS item_price');
    $this->db->from('dishes_modifiers DM');
    $this->db->join('dishes_modifiers_items DMI', 'DMI.modifier_id = DM.id', 'left');
    $this->db->where($condition);
    return $this->db->get()->result();
}

方法二:禁止CodeIgniter自动转义(可选)

如果担心查询构建器对表达式进行不必要的转义,可以给select方法传递第二个参数FALSE,明确告诉它不要转义这段SQL:

public function getAllModifiers($condition) {
    $this->db->select('DM.id AS modifier_id, DM.name, minimum, maximum');
    // 第二个参数FALSE禁用转义,确保表达式被正确解析
    $this->db->select('DMI.id AS item_id, DMI.name AS item_name, DMI.price * 1.1 AS item_price', FALSE);
    $this->db->from('dishes_modifiers DM');
    $this->db->join('dishes_modifiers_items DMI', 'DMI.modifier_id = DM.id', 'left');
    $this->db->where($condition);
    return $this->db->get()->result();
}

为什么原来的写法会报错?

SQL中的反引号 是用来包裹标识符(比如列名、表名)的,当你用反引号把DMI.price * 1.1括起来时,数据库会认为你要查询一个名为DMI.price * 1.1的列,而这个列显然不存在,所以抛出错误。去掉反引号后,数据库会把DMI.price * 1.1当作算术表达式来计算,再通过AS item_price给计算结果指定别名,这样你就能在返回的结果对象中正常访问item_price字段了。

内容的提问来源于stack exchange,提问作者Br0wn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:41:58