【发布时间】:2015-12-16 14:26:38
【问题描述】:
我有一个这样的简单函数:
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_query() 直接在 SQL 控制台上尝试查询,并返回一个完全有效的查询,该查询返回预期值。对我来说,这意味着查询没问题,但是 Codeigniter 和 SQL Server 之间存在一些编码问题。
我已经检查了 DB 编码配置及其:
$db['odbc']['char_set'] = 'utf8';
$db['odbc']['dbcollat'] = 'utf8_general_ci';
DB 的排序规则是Modern_Spanish_CI_AS,NAME 字段设置在databse default。
我错过了什么?可能是PHP配置有问题?
【问题讨论】:
-
你需要用like代替where $this->db->like('NAME', $name);
-
你的数据库的排序规则是什么??
-
使用 mysql_real_escape_string()
-
你的数据库和表
USERS&NAME字段的排序规则是什么?? -
@devpro 我刚试过,结果一样。
标签: php sql-server codeigniter activerecord character-encoding