我正在尝试使用php来执行包含中文字符的mysql查询。以下代码适用于我以前的机器。
$sql="
SELECT
部门,
编码
...
FROM pb ";
if ($conn->query($sql)){
echo "sueccess";
}
else{
echo "MySQL Query fail". $conn->error;}
但是,在迁移到新机器后,我在那里重建了数据库,代码停止工作。我收到"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�门, 大类 FROM pb' at line 20"
错误。
当我将查询更改为所有英文字符时,我没有错误。我的猜测是我使用的汉字有问题。
新数据库是前一个数据库的副本,只有在我复制它时,我必须创建一个新的 MySQL 数据库并使用导入查询将数据放入。我为旧机器和新机器选择了"utf8_general_ci"。
著名的:当我通过phpMyAdmin提交查询时,查询直接在数据库中工作。但它在 php 文件中不起作用。
将字段名称放在反引号中,如下所示:
SELECT
`部门`,
`编码`
FROM ch;
样本
MariaDB [test]> select * from ch;
+----+-------------+--------+
| id | 部门 | 编码 |
+----+-------------+--------+
| 1 | my text | 1234 |
| 2 | second text | 5678 |
+----+-------------+--------+
2 rows in set (0.01 sec)
MariaDB [test]> SELECT
-> `部门`,
-> `编码`
-> FROM ch;
+-------------+--------+
| 部门 | 编码 |
+-------------+--------+
| my text | 1234 |
| second text | 5678 |
+-------------+--------+
2 rows in set (0.00 sec)
MariaDB [test]>
样本 2
<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname = "test";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql="SELECT
id,
`部门`,
`编码`
FROM ch;";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. "t - Col1: " . $row["部门"]. "tCol2: " . $row["编码"]. "n";
}
} else {
echo "0 results";
}
$conn->close();
?>
结果
$ php ch.php
id: 1 - Col1: my text Col2: 1234
id: 2 - Col1: second text Col2: 5678