Подключил Apache
, MySQL
в XAMPP
- всё отлично.
Пытаюсь подключиться к базе данных через php
, используя PDO
. Вот код:
<?php
$driver = 'mysql';
$host = 'localhost';
$db_name = 'kontora';
$db_pass = 'password123';
$db_user = 'admin';
$charset = 'utf8';
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
try {
$dbh = new PDO("$driver:host=$host;dbname=$db_name;charset=$charset", $db_user, $db_pass, $options);
} catch (Exception $e) {
die($e);
}
Все данные верны, как я всё вводил (имя дб, юзер и т.д.).
В конце концов выдаёт ошибку:
PDOException: PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password] in D:\xampp\htdocs\kontora\index.php:12 Stack trace: #0 D:\xampp\htdocs\kontora\index.php(12): PDO->__construct('mysql:host=loca...', 'admin', 'password123', Array) #1 {main} Next PDOException: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client in D:\xampp\htdocs\kontora\index.php:12 Stack trace: #0 D:\xampp\htdocs\kontora\index.php(12): PDO->__construct('mysql:host=loca...', 'admin', 'password123', Array) #1 {main}
Что делать?
Начиная с MySQL 8.0.4, мы меняем плагин аутентификации по умолчанию для сервера MySQL с mysql_native_password на caching_sha2_password. Соответственно, libmysqlclient теперь будет использовать caching_sha2_password как механизм аутентификации по умолчанию.
Cсылка на источник
В случае, если вы хотите использовать прежний способ аутентификации это возможно сделать добавив нового пользователя. Зайдите в консоль mysql и выполните команду:
CREATE USER user@localhost identified with mysql_native_password by 'password';
Теперь вы сможете подключиться пользователем user
c паролем password
Вся проблема состояла в указании порта сервера. Так как это необязательный параметр, то у него есть свой стандарт, который как раз-таки у меня был отредактирован (в ходе исправления другой ошибки).
Вот код который у меня получился:
$dsn = "mysql:host=localhost;port=3307;dbname=kontora;charset=utf8";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
$pdo = new PDO($dsn, 'admin', 'password123', $options);
Я также опустил блок try...catch...
- в официальной документации указано, что PDO
может сам вывести возникшее исключение.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Собственно есть сервер на нем настроен apache+php и отдельно крутится на nodejs nuxt, стал вопрос, как увязать их вместеNUXT отвечает за фронтэнд и php за бекэнд...