繁体   English   中英

codeigniter中的活动记录会自动在where子句值周围添加引号

[英]active record in codeigniter automatically adds quotes around where clause values

我已经尝试阅读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);

但这并没有太大变化。 有什么建议么? 谢谢

默认情况下,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);

对于MIN和MAX查询,我使用null和false关键字来删除引号。

$this->db->where("$value > min_column",null,false);
$this->db->where("$value < max_column",null,false);

这些方法的想法是自动转义以防止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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM