Не читается кириллица - MySQL

Узнай цену своей работы

Формулировка задачи:

Недавно начал изучать PHP. Столкнулся с проблемой, что при обращении файла к базе данных mysql не распознаётся кириллица. Например, я создал юзера с русским именем. И когда обратился к нему через PHP файл:
<?php
header('Content-Type: text/html; charset=utf-8');
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Соединение с БД</title>
</head>
<body>
<?
$db = mysql_connect("localhost","Николай", "77");
mysql_select_db("firstbd", $db);
$result = mysql_query("SELECT * FROM company", $db);
$myrow = mysql_fetch_array($result);
 
echo $myrow["name"];
 
?>
</body>
</html>
То в окно браузера выводится следующая ошибка: "Warning: mysql_connect() [function.mysql-connect]:

Access denied for user 'ИЕРОГЛИФЫ'

'localhost' (using password: YES)" Когда написал логин латиницей, то эта проблема исчезла. Однако в базе данных также есть информация на кириллицей. И при обращении к ней выдаются знаки вопроса. Подскажите, как решить эту проблему.

Решение задачи: «Не читается кириллица»

textual
Листинг программы
<?php
 
namespace Database;
 
/**
 * Класс для работы с БД
 */
class Database
{
 
  /**
   * @var mysqli Хранит соединение с БД
   */
  private static $resource;
 
  /**
   * Соединяется с БД
   * и сразу уставнавливает кодировку UTF-8 для соединения
   */
  public static function connect()
  {
    $config = json_decode(file_get_contents('application/database.json'));
    $profile = $config->profile;
    self::$resource = mysqli_connect(
      $config->{$profile}->server,
      $config->{$profile}->user,
      $config->{$profile}->password,
      $config->{$profile}->database
    );
    Query::fromString("SET NAMES utf8 COLLATE utf8_unicode_ci")->exec();
  }
 
  /**
   * Возвращает соединение
   */
  public static function resource()
  {
    return self::$resource;
  }
}

Объяснение кода листинга программы

  1. Представленный код написан на PHP и является классом для работы с базой данных.
  2. Кодировка UTF-8 устанавливается для соединения с базой данных в методе connect().
  3. Метод resource() возвращает ресурс соединения с базой данных.
  4. Класс Database содержит переменную $resource, которая хранит соединение с базой данных.
  5. В коде используется расширение mysqli для работы с базой данных.
  6. Метод connect() принимает параметры конфигурации из файла 'application/database.json'.
  7. Параметры конфигурации включают в себя информацию о сервере, пользователе, пароле и базе данных.
  8. Метод fromString() используется для выполнения SQL-запроса.
  9. SQL-запрос SET NAMES utf8 COLLATE utf8_unicode_ci устанавливает кодировку соединения с базой данных на UTF-8.
  10. Код не содержит ошибок, связанных с обработкой кириллицы, так как кодировка UTF-8 поддерживает все языки, включая кириллицу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.857 из 5