Мой код вчера работал хорошо, и сегодня он просто не хочет подключаться к моей базе данных. Я не изменил никаких настроек на нем или на коде, и я также не обновил ни одно программное обеспечение. Все, что я делаю, это:
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.default_socket.
Поэтому, чтобы исправить это, вам необходимо правильно настроить в php.ini расположение вашего mysql.sock
Найдите файл mysql.sock. Общие местоположения:
Отредактируйте файл php.ini и правильно установите значение для pdo_mysql.default_socket
Перезапустите сервер Apache, чтобы получить изменения в файле php.ini.
Я просто добавил эту строку:
'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
и все было хорошо.
В Ubuntu этот параметр можно использовать в php.ini
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
В документах для Drush есть обновление, которое описано здесь .