如何在php7的mysqli查询中使用汉字作为关联键?

时间:2018-08-12 13:12:52

标签: php mysql mysqli encode

对于我的mysql数据库。

mysql> show variables like 'character%';
+--------------------------+-------------------------------+
| Variable_name            | Value                         |
+--------------------------+-------------------------------+
| character_set_client     | utf8                          |
| character_set_connection | utf8                          |
| character_set_database   | gb2312                        |
| character_set_filesystem | binary                        |
| character_set_results    | utf8                          |
| character_set_server     | utf8                          |
| character_set_system     | utf8                          |
| character_sets_dir       | F:\wamp\mysql\share\charsets\ |
+--------------------------+-------------------------------+

mysql> show variables like "collation%";
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | gb2312_chinese_ci |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+

我想在php7中使用mysqli选择一些信息。 名为getdata1.php的文件已编码为utf-8

My getdata1.php file.
<?php
    header("Content-type: text/html; charset=utf-8"); 
    $mysqli = new mysqli("localhost", "root", "xxxxxx", "student");
    $sql = "SELECT * FROM student";
    $result = $mysqli->query($sql);
    $row = $result->fetch_assoc();
    print_r($row);
    $result->close();
    $mysqli->close();
?>

我得到以下输出。

Array ( [ID] => 1 [学号] => 11410104 [姓名] => 陈XX)

我知道汉字可以在php的关联数组的关联键和值中使用。
现在我想使用$row["姓名"]获取数据。
同样,以下文件getdata2.php也用utf-8编码,我什么也没得到。

My getdata2.php file.
<?php
    header("Content-type: text/html; charset=utf-8"); 
    $mysqli = new mysqli("localhost", "root", "xxxxxx", "student");
    $sql = "SELECT * FROM student";
    $result = $mysqli->query($sql);
    while ($row = $result->fetch_row()) {
        printf ("%s \n", $row["姓名"]);
    }
    $result->close();
    $mysqli->close();
?>

要检查apache中的日志文件。

Notice:  Undefined index: \xe5\xa7\x93\xe5\x90\x8d in F:\\wamp\\apache2\\htdocs\\getdata2.php on line 7
[Sun Aug 12 20:25:23.217182 2018] [:error] [pid 12204:tid 1264] [client 127.0.0.1:54023]

\xe5\xa7\x93\xe5\x90\x8d字符串是姓名的utf-8编码。

python3
>>> b"\xe5\xa7\x93\xe5\x90\x8d".decode("utf-8")
'姓名'

如何在php7的mysqli查询中使用汉字作为关联键?

2 个答案:

答案 0 :(得分:1)

fetch_row()生成索引数组。

如果要输入数字,您将提供中文字符,请将功能更改为fetch_assoc()

为使您将来能够实现此功能,应该在遇到问题时写上var_export($result->fetch_row());,以便可以看到1-dim数组中 actually 并确定为什么您的元素访问尝试失败。

作为一种良好的通用做法,您应将查询中的*替换为您打算使用的lone列-这样,结果集不会出现不必要的膨胀。

答案 1 :(得分:-1)

只需将$result->fetch_row()重写为$result->fetch_assoc()

<?php
    header("Content-type: text/html; charset=utf-8"); 
    $mysqli = new mysqli("localhost", "root", "xxxxxx", "student");
    $sql = "SELECT * FROM student";
    $result = $mysqli->query($sql);
    while ($row = $result->fetch_assoc()) {
        printf ("%s \n", $row["姓名"]);
    }
    $result->close();
    $mysqli->close();
?>