5

我试过阅读 stackoverflow 上的其他帖子,还检查了 ci 的活动记录文档,但我似乎找不到我的问题的答案

我的模型中有以下逻辑:

    $query = $this->db->get_where('categories', array('parent_id' => $category_id));

根据 last_query() 方法生成的 sql 是:

选择 * 从 ( categories) WHERE parent_id= '8'

我需要删除数字 8 周围的引号。我该怎么做?

我尝试使用 select 语句并将 false 作为第二个参数传递。例如:

    $this->db->select('*', false);
    $this->db->from('categories');
    $this->db->where('parent_id=',$category_id);

但这并没有真正改变太多。有什么建议么?谢谢

4

3 回答 3

6

默认情况下,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);
于 2013-01-27T15:11:37.147 回答
4

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

$this->db->where("$value > min_column",null,false);
$this->db->where("$value < max_column",null,false);
于 2015-06-30T14:31:57.703 回答
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);
于 2013-01-27T15:06:49.870 回答