mysql查询regexp与俄罗斯字符在控制台上工作,但不在PHP中

时间:2011-02-23 05:15:13

标签: php mysql utf-8 character-encoding

我有以下mysql查询:

SELECT user_boothid,user_id,user_fname,user_lname,user_ts,user_company,user_photo FROM se_users WHERE (user_email REGEXP 'Елена' || user_displayname REGEXP 'Елена' || user_company REGEXP 'Елена' || user_title REGEXP 'Елена' || user_fname REGEXP 'Елена' || user_lname REGEXP 'Елена') && user_eventid='15' && user_id!='799' && user_active='true' && ( user_id!=818 )

如果我在控制台上运行此查询,我得到结果,但如果我从PHP脚本运行它,不要返回任何内容。我正在使用一个类来管理数据库连接和查询,这是:

function __construct($serverdb,$usernamedb,$passworddb,$namedb){
    //Fixed problem when old connection (from SocialEngine) was used
    //$this->linkDB=mysql_connect($serverdb,$usernamedb,$passworddb)or die("Can't Connect to DB");
    $this->linkDB=mysql_connect($serverdb,$usernamedb,$passworddb,TRUE)or die("Can't Connect to DB");
    mysql_query("SET character_set_results=utf8", $this->linkDB);
    mb_language('uni');
    mb_internal_encoding('UTF-8');
    mysql_select_db($namedb,$this->linkDB)or die("Can't Select DB");
    //mysql_query("set names 'utf8'",$this->linkDB);
    mysql_set_charset('utf8',$this->linkDB);
}

function makeQuery($query){
    mysql_query("SET character_set_client=utf8", $this->linkDB);
    mysql_query("SET character_set_connection=utf8", $this->linkDB);
    //mysql_query("set names 'utf8'",$this->linkDB);
    mysql_set_charset('utf8',$this->linkDB);
    mysql_query($query,$this->linkDB)or die(mysql_error()."Query: ".$query);
    return mysql_insert_id($this->linkDB);
}

function returnQuery($query){
    mysql_query("SET character_set_results=utf8", $this->linkDB);
    //mysql_query("set names 'utf8'",$this->linkDB);
    mysql_query("SET CHARACTER SET 'utf8'",$this->linkDB);
    mysql_set_charset('utf8',$this->linkDB);
    $temp=mysql_query($query,$this->linkDB)or die(mysql_error());
    $num=mysql_num_rows($temp);
    $rows=Array();
    for($i=0;$i<$num;$i++){
    $rows[$i]=mysql_fetch_assoc($temp)or die(mysql_error());    
    }
    return $rows;
}

我测试了它并且编码似乎没问题(如果我使用ID进行查询,返回带有所有俄语字符的行),但使用正则表达式不起作用。

任何人都可以给我一个在哪里看的东西?

此致 阴影。

更新:如果我还使用LIKE或=进行搜索,则会出现此问题。 UPDATE2:我意识到问题是包含搜索词的$ term var,如果我对查询的值进行硬编码,但是如果我从post

收到值则不会

3 个答案:

答案 0 :(得分:0)

SET NAMES utf8;

SET NAMES utf8 in MySQL?

答案 1 :(得分:0)

听起来,您从POST检索的值的字符编码与数据库中的编码不同。您是否已将HTML页面的字符编码设置为UTF-8?此外,根据this page,MySQL REGEXP不是多字节安全的,不能与多字节字符集一起使用。即。 UTF-8。

答案 2 :(得分:0)

我需要在$ term变量上使用html_entity_decode()为什么我收到它的html符号。

此致 阴影。