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

StackOverflow https://stackoverflow.com/questions/1819592

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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.Что я делаю не так?Есть ли что-то, что мне здесь не хватает?

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Только Unix:

Когда имя хоста установлено на «Localhost», то соединение с сервером сделано через доменную розетку.Если PDO_MYSQL составлен против LibmySQL, то местоположение файла сокета находится в LibmySQL, составленном в месте.Если PDO_MYSQL скомпилирована против MySQLND, можно установить сокет по умолчанию через настройку PDO_MYSQL.DEFAUTL_SOCKET.

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

  1. Найдите свой файл mysql.sock.Общие локации:

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top