2015-06-20 3 views
1

У меня проблема с charset запроса для mysql bd в php-скрипте.php mysql charset запросов

Я устанавливаю параметр GET внутри вопроса select и он работает хорошо для всех латинских символов, но с кириллическими символами он возвращает мне пустой стол. Если я поставлю какое-то значение с использованием кириллицы в запросе вместо параметра GET, запрос работает так, как я хочу. Аналогично, я получаю запрос результата внутри php-Admin, и он работает.

Все символы кириллицы в результате показывают меня правильно.

Я проверил все: PHP-файл utf8, GET значение параметра utf8, mysql_client_encoding() возвращает мне utf8.

Я пробовал все, что нашел - мне ничего не помогает.

header('Content-type:text/html; charset=utf-8'); 
mysql_set_charset('utf8', $link); 
mysql_query("SET NAMES utf8", $link); 
mysql_query("SET CHARACTER SET 'utf8'", $link); 
mysql_query("SET SESSION collation_connection = 'utf8_general_ci'", $link); 
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $link); 

Все это НЕ ПОМОЖЕТ.

Вот мой сценарий php.

<?php 
    $link = mysql_connect('localhost', 'r96036lg_searche', 'Jh1ZT4]^'); 
    //mysql_set_charset('utf8', $link); 
    //mysql_query("SET NAMES utf8", $link); 
    //mysql_query("SET CHARACTER SET 'utf8'", $link); 
    //mysql_query("SET SESSION collation_connection = 'utf8_general_ci'", $link); 
    mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $link); 
    //echo mysql_client_encoding($link); 
    mysql_select_db('r96036lg_searche', $link); 
    //mysqli::set_charset('utf8'); 
    $query = "select id, name, typeid from MainObjects where used = 1"; 
    if(isset($_GET['name']) && !empty($_GET['name'])) { 
     //$name = mb_convert_encoding($_GET['name'], "UTF-8", "win1251"); 
     $name = $_GET['name']; 
     //echo mb_detect_encoding($name, "auto", false); 
     //$name = iconv(mb_detect_encoding($name, "auto", false), "UTF-8", $name); 
     //echo $name; 
     $query .= " and typeid = 1 and (name like '%".$name. 
       "%' or id in (select parentid from MainObjects where name like '%" 
       .$name."%' and used = 1))"; 
    } 
    //echo $query; 
    $result = mysql_query($query, $link); 
    if(!$result) echo mysql_error(); 
    else { 
     $out = "["; 
     while($row = mysql_fetch_row($result)) { 
      ... //here is myoutput 
     } 
     $out .= "]"; 
     echo $out; 
    } 
?> 
+0

Вы не избежали параметра $ _GET перед вводом его в запрос. Вы знаете о SQL Injection? Если нет, прочитайте об этом, прежде чем продолжить. –

+0

Похоже, вы создаете JSON. Если это правда, вместо этого используйте 'json_encode'. –

+0

Что вы получаете, когда вы 'echo $ query);'? Вы уже пытались запустить это в phpmyadmin? –

ответ

1

Так вы должны это сделать. Это не решит проблему кодирования caracter, но это поможет с reste. (И, возможно, даже решить вашу проблему, потому что это может быть просто связано с тем, чтобы не ускользнуть от значений).

$query = "select id, name, typeid from MainObjects where used = 1"; 
if(isset($_GET['name']) && !empty($_GET['name'])) { 
    $name = mysql_real_escape_string($_GET['name']); 
    $query .= " and typeid = 1 and (name like '%".$name. 
      "%' or id in (select parentid from MainObjects where name like '%" 
      .$name."%' and used = 1))"; 
} 
//echo $query; 
$result = mysql_query($query, $link); 

Это не помогает, когда-то некорректное кодирование символов. Есть три точки:

  • GET данные: вы пытались кодировать URL как example.com/index.php?name=%d0%ba (кириллица строчной ки)
  • связи с сервером. Если вы действительно попробовали все, что сказали, не должно быть ошибки
  • данные в таблицах: Соответствует ли соответствие таблицы ее содержимому. Я подозреваю, что существует несоответствие. Если данные находятся в UTF-8, но в таблице нет, mysql попытается преобразовать данные из одного набора символов в другой, и в результате этого будет мало.
+0

Это не поможет. – Ircover

+0

Вы не разместили данные, которые я просил.У меня нет данных. Я не могу проверить. –

+0

А теперь я отправил. – Ircover