MySQL запрос регулярных выражений с русскими символами работает на консоли, но не в PHP - PullRequest
0 голосов
/ 23 февраля 2011

У меня следующий запрос 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;
}

Я проверил это, и кодировка, кажется, в порядке (если я делаю запрос с идентификатором, возвращаю строку со всеми русскими символами, как и должно), но использование регулярного выражения не работает.

Кто-нибудь может дать мне подсказку, где искать?

С уважением, Тень.

ОБНОВЛЕНИЕ: эта проблема возникает, если я использую LIKE или = для поиска. ОБНОВЛЕНИЕ2: Я понял, что проблема заключается в переменной $ term, в которой содержится термин для поиска, если я жестко задал значение, по которому работает запрос, но нет, если я получу значение из post

Ответы [ 3 ]

0 голосов
/ 23 февраля 2011

Похоже, кодировка символов в значениях, которые вы получаете из POST, отличается от кодировки в базе данных. Вы установили кодировку символов для ваших HTML-страниц в UTF-8? Кроме того, согласно этой странице MySQL REGEXP не является многобайтовым и не может использоваться с многобайтовыми наборами символов. то есть. UTF-8.

0 голосов
/ 23 февраля 2011

Мне нужно было использовать html_entity_decode () в переменной $ term, почему я получал html-знаки.

С уважением, Тень.

0 голосов
/ 23 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...