我尝试使用codeigniter活动记录,当我尝试更新名为Dec的字段(1月 - 11月之前很好)时,它会给我错误...
这是我的代码
$this->db->set($month,"$month+$tax", FALSE);
$this->db->set('total_yearly',"total_yearly+$tax", FALSE);
$this->db->where(array('tax_category' => $tax_category));
$this->db->update($nama_table);
查询返回如下
UPDATE `tax` SET Dec = Dec+10000, total_yearly = total_yearly+10000 WHERE `tax_category` = 'Hotel' AND `year` = '2017'
错误消息
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 'Dec = Dec + 2479附近,total_yearly = total_yearly + 2479 WHERE
tax_category
='酒店'AN'在第1行
任何解决方案?我试图在查询中添加反引号,但结果仍然是反引号被删除,或者我可能没有做得好。
由于
答案 0 :(得分:2)
希望这会对你有所帮助:
删除第三个参数FALSE
以允许使用反引号
set()
还会接受可选的第三个参数($escape)
,如果设置为FALSE
,则会阻止数据进行转义。
$this->db->set($month,$month.'+'.$tax);
$this->db->set('total_yearly',"total_yearly+".$tax);
$this->db->where(array('tax_category' => $tax_category));
$this->db->update($nama_table);
了解更多: https://www.codeigniter.com/user_guide/database/query_builder.html#updating-data
答案 1 :(得分:1)
我认为问题在于" DEC"是reserved word。在SET子句中的字段名称周围抛出一些反引号,以便查询:
UPDATE `tax` SET `Dec` = `Dec`+10000, `total_yearly` = `total_yearly`+10000 WHERE `tax_category` = 'Hotel' AND `year` = '2017'
答案 2 :(得分:1)
尝试更换:
$this->db->set($month,"$month+$tax", FALSE);
with:
$this->db->set("`$month`","`$month`+$tax", FALSE);
强制添加反引号