Php 带有特殊字符的查询不';不能在活动记录中工作
我有一个简单的函数,如下所示:Php 带有特殊字符的查询不';不能在活动记录中工作,php,sql-server,codeigniter,activerecord,character-encoding,Php,Sql Server,Codeigniter,Activerecord,Character Encoding,我有一个简单的函数,如下所示: function get($name) { //SELECT ID FROM USERS WHERE NAME = $name $this->db->select('ID'); $this->db->limit(1); $this->db->from('USERS'); $this->db->where('NAME', $name); $query = $this->db->g
function get($name) {
//SELECT ID FROM USERS WHERE NAME = $name
$this->db->select('ID');
$this->db->limit(1);
$this->db->from('USERS');
$this->db->where('NAME', $name);
$query = $this->db->get();
$row = $query->row();
return $row->ID;
}
除了我在$name
中有特殊字符(例如,Á或Á)之外,一切都正常。在这种情况下,查询不会返回任何行
我使用了$this->db->last\u query()
直接在SQL控制台上尝试该查询,并返回一个完全有效的查询,返回预期值。对我来说,这意味着查询是可以的,但是Codeigniter和SQL Server之间存在一些编码问题
我已经检查了DB编码配置及其:
$db['odbc']['char_set'] = 'utf8';
$db['odbc']['dbcollat'] = 'utf8_general_ci';
数据库的排序规则为Modern\u Spanish\u CI\u AS
,名称字段在数据库默认值中设置
我错过了什么?PHP配置可能有问题?将数据库排序规则更改为utf8\u general\u ci
并检查USERS
表排序规则和NAME
字段排序规则
ALTER DATABASE <database_name> COLLATE SQL_Latin1_General_CP1_CI_AS ;
ALTER TABLE USERS ALTER COLUMN NAME varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS
alterdatabasecollatesql\u Latin1\u General\u CP1\u CI\u AS;
ALTER TABLE USERS ALTER COLUMN NAME varchar(255)将SQL\u Latin1\u General\u CP1\u CI\u整理为
您也可以从management studio进行更改。。它在选项菜单下
尝试使用
$this->db->like('NAME', $name);
或
在头文件中
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
如果您使用Codeigniterform_open()
它将生成您需要使用like而不是where$this->db->like('NAME',$NAME);数据库的排序规则是什么?使用mysql\u real\u escape\u string()数据库和表的排序规则是什么USERS
&NAME
field???@devpro我刚刚尝试过,结果相同。找不到该排序规则。它从乌尔都语100直接到乌兹别克语拉丁语。我用的是SQL Server。您可以在问题或标签中看到。对此表示抱歉。。我会给你那些查询,我已经尝试过这些查询,但是它们不起作用。我有很多“不正确的Sintax”错误。很可能是MySQL,让我们来看看。对不起,我已经尝试过“like”方法了。你可以在第一条评论中看到。文件已经有了这个头。无论如何谢谢你