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
相关产品推荐
相关产品推荐

