2015-06-20 61 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