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



我正在尝试使用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

相关内容

  • 没有找到相关文章

最新更新