2015-06-20 31 views
1

我有問題的MySQL腳本查詢字符集在PHP腳本。PHP的MySQL查詢字符集

我將GET參數放在select查詢中,它適用於所有拉丁字符,但使用西里爾字符它會返回空表。如果我在查詢中使用西里爾文而不是GET參數來設置一些值,查詢就可以按照我的意願工作。同樣,我在php-Admin中得到結果查詢並且它可以工作。

結果中的所有西里爾字符顯示我正確。

我檢查了一切:PHP文件是utf8GET參數值是utf8mysql_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注入嗎?如果沒有,請在繼續之前仔細閱讀。 –

+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(西裏爾字母小寫字母KA)
  • 與服務器之間的通信。如果您真的嘗試了所有的說法,那麼表格中的數據不應該有錯誤
  • :表格的排序規則是否真的與其內容相對應。我可能會懷疑存在不匹配的情況。如果數據是UTF-8,但表不是,則mysql會嘗試將數據從一個字符集轉換爲另一個字符集,因此它不會太多。
+0

它沒有幫助。 – Ircover

+0

您沒有發佈我要求的數據。我沒有你的數據。我無法測試。 –

+0

現在我發佈了。 – Ircover