我已尝试在stackoverflow上阅读其他帖子,并检查了ci的活动记录文档,但我似乎找不到我的问题的答案
我的模型中有以下逻辑:
$query = $this->db->get_where('categories', array('parent_id' => $category_id));
根据last_query()方法生成的sql为:
SELECT * FROM(categories
)WHERE parent_id
='8'
我需要删除数字8周围的引号。我该怎么做?
我尝试使用select语句并将false作为第二个parm传递。例如:
$this->db->select('*', false);
$this->db->from('categories');
$this->db->where('parent_id=',$category_id);
但这并没有太大变化。有什么建议? 谢谢
答案 0 :(得分:4)
默认情况下,CodeIgniter会尝试在比较中预测数据类型,并相应地使用相应的SQL语法。如果您的查询使用单引号,则可能表示$ category_id被视为字符串而不是整数。如果你尝试会发生什么:
$this->db->select('*');
$this->db->from('categories');
$this->db->where('parent_id', (int) $category_id);
或者,您可以手动构建自己的WHERE语句:
$this->db->where('parent_id = ' . (int) $category_id);
答案 1 :(得分:3)
对于MIN和MAX查询,我使用null和false关键字删除引号。
$this->db->where("$value > min_column",null,false);
$this->db->where("$value < max_column",null,false);
答案 2 :(得分:2)
这些方法的想法是自动转义以防止SQL注入,如果由于某种原因你不希望你可以发送这样的原始查询:
$q = "select * from categories where parent_id = $category_id";
$this->db->query($q)->result();
我觉得更容易。但是我认为你可以发送额外的false
参数来禁用它,例如:
$query = $this->db->get_where('categories', array('parent_id' => $category_id),false);
仅供参考,如果您想发送原始查询并将其转义(对于更复杂的查询),您可以使用:
$category_id = $this->db->escape($category_id);