从Codigniter的LIKE()获取奇怪的查询字符串

时间:2016-02-15 10:33:42

标签: php database codeigniter-3

我正在尝试在Codigniter中进行一个简单的查询:

$this->db->select("cats");
$this->db->from("pets");
$this->db->like("name", 'a', 'after');

然后表明:

echo $this->db->get_compiled_select();

结果:

SELECT cats FROM pets WHERE name LIKE 'a%' {escape '!'}

出于某种原因,CI在最后添加{escape'!'}。当我尝试运行查询时,当然会产生错误。

数据库配置:

$db['pyramid'] = array(
'dsn'   => 'pyramid',
'hostname' => '',
'username' => '',
'password' => '',
'database' => '',
'dbdriver' => 'odbc',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'WINDOWS-1252',
'dbcollat' => '',
    //'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

有谁知道如何解决这个问题?

修改

如果我这样做,它会起作用:

$this->db->select("cats");
$this->db->from("pets");
$this->db->where("name LIKE 'a%'", NULL, FALSE);

但是我必须自己逃避数据。

第二次编辑:

似乎CodeIgniter根据this生成了正确的查询。

也许是因为它是一个普及型数据库。

我已经创建了一个新主题,其中包含如何绕过问题here的问题。

2 个答案:

答案 0 :(得分:0)

尝试

$var = $this->db->select("cats")->like("name", 'a', 'after')->get("pets")->result();
print_r($var);

转到363的odbc驱动程序,找到或搜索_like_escape_str你肯定会找到一些东西......

$sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_chr);

并将其替换为

$sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%' ";//or return false as needs 

也许这可以帮助

答案 1 :(得分:0)

使用以下查询: -

$this->db->select('cats')
$this->db->from('pets');
$this->db->like('name', 'a', 'after');
$result = $this->db->get()->result_array();

您也可以通过以下方式撰写: -

$result = $this->db->select('cats')->from('pets')
       ->where("name LIKE a%")->get()->result_array();

希望它会对你有所帮助:)。