php用中文字符执行mysql查询,SQL语法错误

时间:2018-04-08 08:56:18

标签: php mysql

我正在尝试使用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文件中不起作用。

1 个答案:

答案 0 :(得分:0)

将字段名放在反引号中,如下所示:

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