[英]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.