Php codeigniter中的活动记录会自动在where子句值周围添加引号
我试过阅读stackoverflow上的其他文章,也检查了ci的活动记录文档,但我似乎找不到问题的答案 我的模型中有以下逻辑:Php codeigniter中的活动记录会自动在where子句值周围添加引号,php,codeigniter,Php,Codeigniter,我试过阅读stackoverflow上的其他文章,也检查了ci的活动记录文档,但我似乎找不到问题的答案 我的模型中有以下逻辑: $query = $this->db->get_where('categories', array('parent_id' => $category_id)); 根据最后一个\u query()方法生成的sql为: 从(categories)中选择*其中parent\u id='8' 我需要删除数字8周围的引号。我该怎么做 我尝试使用sele
$query = $this->db->get_where('categories', array('parent_id' => $category_id));
根据最后一个\u query()方法生成的sql为:
从(categories
)中选择*其中parent\u id
='8'
我需要删除数字8周围的引号。我该怎么做
我尝试使用select语句并将false作为第二个参数传递。例如:
$this->db->select('*', false);
$this->db->from('categories');
$this->db->where('parent_id=',$category_id);
但这并没有改变多少。有什么建议吗?
谢谢这些方法的思想是自动转义以防止SQL注入,如果出于某种原因您不想这样做,您可以发送如下原始查询:
$q = "select * from categories where parent_id = $category_id";
$this->db->query($q)->result();
我觉得这容易多了。但是,我认为您可以发送一个额外的false
paremeter来禁用它,例如:
$query = $this->db->get_where('categories', array('parent_id' => $category_id),false);
仅供参考,如果您想发送原始查询并转义它们(对于更复杂的查询),您可以使用:
$category_id = $this->db->escape($category_id);
默认情况下,CodeIgniter尝试预测比较中的数据类型,并相应地使用适当的SQL语法。如果查询使用单引号,则可能表明$category\u 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);
$this->db->where($value>minu列),null,false);
$this->db->where($value
感谢您提供有关复杂查询的提示。但是,select中的FALSE parm不会产生不同的效果。也就是说,它不能解决问题。在发布之前,我已经试过了……不过这只能解决这种情况,如果变量不可强制转换,它就不会运行查询。如果变量实际上是一段文本,强制转换操作会将其转换为0整数。查询仍将运行,但不会返回任何结果。在强制转换为int之前,可以使用ctype_digit()查看它是否实际上是整数。如果字符串完全由数字组成,则此函数接受字符串并返回true: