Ошибка при подключении к MySQL с использованием PHP / PDO - PullRequest
33 голосов
/ 30 ноября 2009

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

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. Что я делаю неправильно? Я что-то упускаю здесь?

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

Ответы [ 5 ]

86 голосов
/ 30 ноября 2009

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

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

9 голосов
/ 05 марта 2012

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

В самом конце записки написано:

Только для Unix:

Когда имя хоста установлено на "localhost", тогда соединение с Сервер сделан через доменный сокет. Если PDO_MYSQL скомпилирован против libmysql, то расположение файла сокета находится в libmysql составлено в месте. Если PDO_MYSQL скомпилирован с mysqlnd a сокет по умолчанию может быть установлен через настройку pdo_mysql.default_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

2 голосов
/ 05 декабря 2016

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

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
1 голос
/ 30 октября 2012

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

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

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

0 голосов
/ 26 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...