繁体   English   中英

为什么在括号内,CodeIgniter不会从SQL查询返回结果?

[英]Why won't CodeIgniter return the result from a SQL query when parentheses are in it?

当我建立了一个在查询值之一中包含括号的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)'"

我已经使用$ this-> db-> last_query()并且查询的格式正确。 即使复制没有结果的最后一个查询并直接在数据库上运行,也将获得预期的结果。

尽管运行$ this-> db-> last_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)'"

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

暂无
暂无

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

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