Подтвердить что ты не робот

Ошибка при подключении к MySQL с использованием PHP/PDO

Мой код вчера работал хорошо, а сегодня он просто не хочет подключаться к моей базе данных. Я не изменил никаких настроек на нем или на коде, и я также не обновил ни одно программное обеспечение. Все, что я делаю, это:

new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');

И я получаю сообщение с хорошим исключением:

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...

Дело в том, что я явно не пытаюсь подключиться, используя сокет unix, но используя TCP/IP. Что я делаю не так? Здесь что-то не хватает?

Спасибо за любую помощь.

4b9b3361

Ответ 1

Вы используете сокет Unix. При чтении "localhost" клиентские библиотеки MySQL не интерпретируют его как TCP-хост "localhost" и разрешают это имя, но используют местоположение Socket по умолчанию. Для использования TCP на локальном компьютере вы должны использовать 127.0.0.1 как имя хоста.

Чтобы указать предыдущее использование unix_socket вместо host в DSN. Местоположение сокета, используемого для localhost, можно определить во время компиляции или в некоторых версиях PHP, используя pdo_mysql.default_socket в php.ini.

Ответ 2

Из документации PHP о подключении к MySQL с использованием PDO: PDO_MYSQL DNS

В записке в самом конце говорится:

Только для Unix:

Если имя хоста установлено на "localhost", то соединение с сервер создается через сокет домена. Если PDO_MYSQL скомпилирован против libmysql, то местоположение файла сокета находится в libmysql's скомпилировано в местоположении. Если PDO_MYSQL скомпилирован против mysqlnd a default socket можно установить через параметр pdo_mysql.default_socket.

Итак, чтобы исправить это, вам нужно правильно настроить в php.ini расположение вашего mysql.sock

  • Найдите файл mysql.sock. Общие местоположения:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • или если вы используете MAMP или LAMP, найдите внутри папки tmp для mysql
  • Измените файл php.ini и правильно установите значение для pdo_mysql.default_socket

  • Перезагрузите сервер Apache, чтобы получить изменения в файле php.ini

Ответ 3

Я просто добавил эту строку:

'unix_socket'   => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',

и все было хорошо.

Ответ 4

В Ubuntu этот параметр можно использовать в php.ini

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

Ответ 5

Там обновление для документов для Drush, которое описано здесь.