活动记录get_where()添加了虚假的反引号

时间:2018-01-29 17:54:07

标签: codeigniter

我有一个简单的插入,然后选择: -

Array ( )

这会产生: -

SELECT *
FROM `data_strings`
WHERE `string` = 'this and `that` between `, up` `to` and in the.'

原因似乎是当活动记录编译select时,它会为查询添加不必要的反引号,我们最终得到: -

$q = "this and that between , up to and in the.";
$this->db->where('string', $q);
echo $this->db->get_compiled_select('data_strings');

它看起来像Codeigniter中的一个错误。有人知道是否有体面的工作?

要复制:

T

1 个答案:

答案 0 :(得分:1)

我想指出这个问题不仅限于get_where()。 where()也会发生这个问题。我测试过并遇到了同样的问题:

<div id="map"></div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="/wp-content/themes/happenstance/css/jquery.qtip.min.css">  </script>
<script src="/wp-content/themes/happenstance/js/mcm.clickable.map.js"></script>
<script>
var map = $("#map").ezClickableMap({});
</script>

我也有同样的问题:

$query = $this->db->where(['string' => $q])
    ->get('data_strings');

最后,最好的(也可能是唯一的)解决方法是使用CodeIgniter的查询绑定功能:

$query = $this->db->where('string', $q)
    ->get('data_strings');

这个完整的示例按预期工作:

$query = $this->db->query('
    SELECT * 
    FROM data_strings
    WHERE string = ? 
', [ $q ] );

请注意:我使用的是mysqli驱动程序。新鲜的CodeIgniter安装。 Ubuntu 14.04,PHP 5.5.9。