Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php codeigniter中的活动记录会自动在where子句值周围添加引号_Php_Codeigniter - Fatal编程技术网

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

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

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

我的模型中有以下逻辑:

    $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: