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

Php 从Codigniter的LIKE()中获取奇怪的查询字符串,php,database,codeigniter-3,Php,Database,Codeigniter 3,我试图在Codigniter中进行一个简单的查询,如下所示: $this->db->select("cats"); $this->db->from("pets"); $this->db->like("name", 'a', 'after'); $this->db->select("cats"); $this->db->from("pets"); $this->db->where("name LIKE 'a%'", NULL

我试图在Codigniter中进行一个简单的查询,如下所示:

$this->db->select("cats");
$this->db->from("pets");
$this->db->like("name", 'a', 'after');
$this->db->select("cats");
$this->db->from("pets");
$this->db->where("name LIKE 'a%'", NULL, FALSE);
然后展示:

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->like("name", 'a', 'after');
$this->db->select("cats");
$this->db->from("pets");
$this->db->where("name LIKE 'a%'", NULL, FALSE);
但我必须自己逃离这些数据

第二次编辑:

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

也许是因为它是一个无处不在的数据库

我提出了一个新的问题来解决这个问题。

试试看

$var = $this->db->select("cats")->like("name", 'a', 'after')->get("pets")->result();
print_r($var);
转到odbc驱动程序的363,用类似于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 
也许这会有帮助

试试看

$var = $this->db->select("cats")->like("name", 'a', 'after')->get("pets")->result();
print_r($var);
转到odbc驱动程序的363,用类似于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 
也许这有助于使用以下查询:-

$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();
希望它能帮助您:

使用以下查询:-

$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();

希望它能对您有所帮助:

那么$this->db->last\u查询说了什么?它没有找到那个语句,因为我从查询中得到了一个语法错误。请尝试$this->db->selectcats->wherename,比如'a%',null,false->getpets;您是否尝试过$this->db->selectcats$本->数据库->相似名称,a,后$这个->数据库->获取宠物?按照我的建议使用,直到找到东西。。不要停留在单一的问题上,男人继续工作;$this->db->last_查询显示了什么?它没有到达该语句,因为我从查询中得到了一个语法错误。请尝试$this->db->selectcats->wherename,比如'a%',null,false->getpets;您是否尝试过$this->db->selectcats$本->数据库->相似名称,a,后$这个->数据库->获取宠物?按照我的建议使用,直到找到东西。。不要停留在单一的问题上,男人继续工作;我不在我这边工作。您正在尝试使用ODBC驱动程序吗?我开始觉得问题出在司机身上,找不到。您正在查看system/database/odbc/odbc_driver.php吗?我正在运行v3.0.0是的,在变量中你会发现类似{escape'%s'};在system/database/drivers/odbc/odbc_driver.php中搜索该变量……我在帖子中找到了该字符串,但没有找到您的建议。我试着用一个空字符串替换它,结果它成功了。它甚至似乎能正确地逃脱。但这并不安全,因为我不确定还有什么取决于此。我感谢你的耐心!它总是会产生一个错误,所以只需替换它并使用它,但将原始作为注释//行,以便将来如果需要,您可以获得…:我不在我这边工作。您正在尝试使用ODBC驱动程序吗?我开始觉得问题出在司机身上,找不到。您正在查看system/database/odbc/odbc_driver.php吗?我正在运行v3.0.0是的,在变量中你会发现类似{escape'%s'};在system/database/drivers/odbc/odbc_driver.php中搜索该变量……我在帖子中找到了该字符串,但没有找到您的建议。我试着用一个空字符串替换它,结果它成功了。它甚至似乎能正确地逃脱。但这并不安全,因为我不确定还有什么取决于此。我感谢你的耐心!它总是会产生一个错误,所以只需替换它并使用它,但将原始作为注释//行,以便将来如果需要,您可以获得…: