PHP выполняет запрос MySQL с китайским иероглифом, ошибка в синтаксисе SQL

0

Я пытаюсь использовать 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" для старой машины и новой машины,

NOTED: запрос работает в базе данных напрямую, когда я отправляю запрос через phpMyAdmin. Но это не работает в php файле.

  • 0
    Попробуйте сначала установить кодировку для соединения: php.net/manual/en/mysqlinfo.concepts.charset.php
  • 1
    Все, что нужно, - это неправильная настройка кодировки в вашем приложении - все должно быть одинаковым! Ранее я написал ответ о кодировке UTF-8, который содержит небольшой контрольный список, который будет охватывать большинство проблем кодировки в приложении PHP / MySQL. Есть также более глубокая тема, UTF-8 . Скорее всего, вы найдете решение в одной или обеих из этих тем.
Показать ещё 3 комментария
Теги:

1 ответ

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
  • 0
    запрос работает в базе данных напрямую, когда я отправляю запрос через phpMyAdmin. Но это не работает в файле php. И я пробовал слабые слова, это не имеет значения.
  • 0
    @ Луна Инь - посмотри на твой ответ. Я расширил его с помощью образца PHP, и он работает
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню