我实际上需要像
这样的mysql查询SELECT *, CONCAT(pri_hours, ':', pri_minutes, ' ', IF(pri_ampm = 1, 'am', 'pm')) as hr FROM (`sms_primary`) ORDER BY STR_TO_DATE(hr, '%h:%i %p')
当我使用codeigniter时,我写了如下查询
$this->db->select("*,CONCAT(pri_hours,':', pri_minutes,' ',IF(pri_ampm = 1,'am','pm')) as hr",FALSE);
$this->db->from('sms_primary');
$this->db->order_by("STR_TO_DATE(hr,'%h:%i %p')");
但我没有得到预期的查询,我得到它如下
SELECT *, CONCAT(pri_hours, ':', pri_minutes, ' ', IF(pri_ampm = 1, 'am', 'pm')) as hr FROM (`sms_primary`) ORDER BY STR_TO_DATE(hr, `'%h:%i` %p')
我希望你能发现生成的查询中的差异。它注入了一些不需要的操作员`。我只想删除它。怎么做?
更改
STR_TO_DATE(hr, `'%h:%i` %p')
到
STR_TO_DATE(hr, '%h:%i %p')
答案 0 :(得分:0)
codeigniter正在添加反引号。在查询之前使用此
$this->db->_protect_identifiers=false;
希望这会有所帮助
答案 1 :(得分:0)
您需要使用此 - > db-> _protect_identifiers = false;
在您的查询中,它应该是:
$this->db->_protect_identifiers = FALSE; // Make it false here
$this->db->order_by("STR_TO_DATE(hr,'%h:%i %p')");
$this->db->_protect_identifiers = TRUE; // Make it true again when order_by code completed