Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql查询字符集_Php_Mysql_Utf 8 - Fatal编程技术网

Php mysql查询字符集

Php mysql查询字符集,php,mysql,utf-8,Php,Mysql,Utf 8,我对php脚本中mysql bd的查询字符集有问题 <?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); /

我对php脚本中mysql bd的查询字符集有问题

<?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;
  }
?>
我将
GET
参数放在
select
query中,它适用于所有拉丁字符,但对于西里尔字符,它会返回空表。如果我在查询中用西里尔字母代替
GET
参数放置一些值,查询将按我所希望的方式工作。同样,我在php管理员中得到了结果查询,它也可以工作

结果中的所有西里尔字母都显示我是正确的

我已经检查了所有内容:php文件是
utf8
GET
参数值是
utf8
mysql\u client\u 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;
  }
?>

这就是你应该做的。它不会解决字符编码的问题,但它将有助于reste。(甚至可以解决您的问题,因为这可能只是与不转义值有关)

我认为这无助于在某些地方存在字符编码不匹配。有三点:

  • 获取数据:是否尝试对url进行类似
    example.com/index.php的编码?名称=%d0%ba
    (西里尔文小写字母ka)
  • 与服务器的通信。如果你真的尝试了你所说的一切,就不应该有错误
  • 表中的数据:表的排序规则是否真正对应于其内容。我可能怀疑的是存在不匹配。如果数据是UTF-8格式的,但表不是,mysql将尝试将数据从一个字符集转换为另一个字符集,结果不会太多

在将$\u GET参数注入查询之前,没有对其进行转义。你知道SQL注入吗?如果没有,请在继续之前阅读相关内容。看起来您生成了一些JSON。如果这是真的,请改用
json\u encode
。当您使用
echo$query)时会得到什么?你已经试过在phpmyadmin中运行这个了吗?是的,我知道注射。现在它不重要了@LorenzMeyer
JSON
仅用于输出-没有问题。是的,我在phpadmin试过——它很有效@Lorenzmeyry你没有发布我要的数据。我没有你的数据。我无法测试。使用您的
名称
参数值,它可以工作。你是怎么转换的?表字段也是
utf8
%d0%ba
是西里尔字母ka的标准url编码。这意味着您的
$\u GET
值没有用utf8编码。通常,如果原始html页面是用utf8编码的,那么表单数据也会用utf8编码。我在java应用程序中使用
urlcoder
发送正确的
GET
值。谢谢,你帮了我。