Php 为什么赢了';当括号在SQL查询中时,t CodeIgniter是否返回该查询的结果?

Php 为什么赢了';当括号在SQL查询中时,t CodeIgniter是否返回该查询的结果?,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,如果生成的SQL查询在其中一个搜索值中包含括号,则不会得到预期的结果。但是,如果直接在数据库上运行查询,则会返回预期结果 此外,如果我的搜索不包含括号,它将正确返回预期结果 CodeIgniter型号功能: function get_submodels($params) { $sql = "SELECT DISTINCT(`a`.`submodel`), `a`.`model_id` FROM `models` AS `a`" . "LEFT JOIN `manufacturers` AS

如果生成的SQL查询在其中一个搜索值中包含括号,则不会得到预期的结果。但是,如果直接在数据库上运行查询,则会返回预期结果

此外,如果我的搜索不包含括号,它将正确返回预期结果

CodeIgniter型号功能:

function get_submodels($params)
{
 $sql = "SELECT DISTINCT(`a`.`submodel`), `a`.`model_id` FROM `models` AS `a`"
 . "LEFT JOIN `manufacturers` AS `b` ON `a`.`manufacturer` = `b`.`manufacturer_id`"
 . "WHERE `a`.`year` = ? AND `b`.`manufacturer` = ? AND `a`.`model` = ?"
 . "ORDER BY `a`.`submodel` ASC;";

 $query = $this->db->query($sql, $params);

 return $query->result();
}
工作查询的一个示例:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'CHEVROLET' AND `a`.`model` = 'MONTE CARLO'"
"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'"
非工作查询的一个示例:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'CHEVROLET' AND `a`.`model` = 'MONTE CARLO'"
"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'"

我使用了$this->db->last\u query(),并且查询的格式正确。即使复制最后一个没有结果的查询并直接对数据库运行它,也会得到预期的结果。

尽管运行$this->db->last\u query()并认为查询是正确的,但我决定在页面上启用评测。我的结果显示括号被编码成HTML实体

因此,查询的形式如下:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'"
与此相反:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'"

我通过修改insert查询来解决这个问题,为这些列使用htmlentities,并更新了所有现有记录。虽然我知道Codeigniter会转义值,但我不知道它也会对它们进行编码。

它们可能不是问题,但为什么要使用
\n
?实际的错误输出是什么?@Pekka新行不是必需的,而是phpMyAdmin如何从查询运行中自动生成php字符串。@J0HN没有错误,但当查询在其中一个搜索值中包含括号时,返回0个结果。如果没有括号,查询将返回结果。所以,我很想通过Codeigniter知道为什么会发生这种情况。+1提供了好的信息,并且回来发布答案。干杯很高兴随时提供信息。我在这里很幸运地找到了解决方案,如果我自己能解决的话,我还可以为我的问题提供解决方案。