我正在尝试在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的问题。
答案 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();
希望它会对你有所帮助:)。