Начиная с Zend Tutorial - Zend_DB_Adapter throws Exception: "SQLSTATE [HY000] [2002] Нет такого файла или каталога"

Я начинаю изучать Zend Framework с помощью книги "Zend Framework in Action" на немецком языке.

Прямо там, где начинается интерес, мой PHP Unit Test выдает эту ошибку: "Zend_Db_Adapter_Exception: SQLSTATE [HY000] [2002] Нет такого файла или каталога"

Я не могу найти подсказки в google. Я сделал все как в книге. Может ли кто-нибудь дать мне подсказку, где искать мою ошибку?

Это обычная ошибка начинающего?

Ответ 1

Я бы сказал, что у вас есть проблема с подключением PHP к MySQL...

Что-то вроде PHP, пытающегося найти файл сокета, а не найти его, может быть?
(У меня была эта проблема пару раз - не уверен, что ошибка, которую я получил, была именно такой, хотя)


Если вы используете некоторую систему на базе Linux, там должен быть файл my.cnf, который используется для настройки MySQL - на моем Ubuntu, он находится в /etc/mysql/.

В этом файле может быть что-то вроде этого:

socket = /var/run/mysqld/mysqld.sock


PHP должен использовать один и тот же файл - и, в зависимости от вашего дистрибутива, файл по умолчанию может быть не таким, как тот, который использует MySQL.

В этом случае добавление этих строк в ваш файл php.ini может помочь:

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

(Вам нужно будет перезапустить Apache, чтобы была учтена модификация php.ini)

Последнее должно быть достаточно для PDO, которое используется Zend Framework, но два предыдущих не будут наносить никакого вреда и могут быть полезны для других приложений.


Если это не поможет: можете ли вы подключиться к своей базе данных с помощью PDO, в другом script, полностью независимом от Zend Framework?

то есть. делает что-то вроде этой работы (цитирование):

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

Если нет, проблема определенно не с ZF и является проблемой конфигурации/установки PHP.

Если да... Ну, это означает, что у вас есть проблема с ZF, и вам нужно будет предоставить нам больше информации о вашей настройке (например, ваш DSN?)

Ответ 2

Не предполагайте, что ваш unix_socket будет отличаться от одного к другому, попытайтесь его найти.

Прежде всего, получить ваше местоположение unix_socket.

$ mysql -u root -p

Введите пароль mysql и войдите в свой сервер mysql из командной строки.

mysql> show variables like '%sock%';
+---------------+---------------------------------------+
| Variable_name | Value                                 |
+---------------+---------------------------------------+
| socket        | /opt/local/var/run/mysql5/mysqld.sock |
+---------------+---------------------------------------+

Ваш unix_soket может быть разным.

Затем измените свой php.ini, найдите свой php.ini файл из

<? phpinfo();

Возможно, вы установили много php с другой версией, поэтому, пожалуйста, не предполагайте местоположение вашего файла php.ini, получите его из своей "phpinfo";

Измените свой php.ini:

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock

pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

Затем перезапустите apache или php-fpm.

Ответ 3

Попробуйте установить host = 127.0.0.1 в свой файл настроек db, это сработало для меня!:)

Надеюсь, что это поможет!

Ответ 4

У меня была эта проблема при запуске указателя magento в osx. и да, это связано с проблемой php при подключении к mysql через pdo

в mac osx xampp, чтобы исправить это, вы создали символическую ссылку на каталог /var/mysql, вот как

cd /var/mysql && sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

если каталог /var/mysql не существует, мы должны создать его с помощью

sudo mkdir /var/mysql

Ответ 5

Я также пострадал от этой проблемы и просто, добавив номер порта после того, как ip-адрес сохранил меня.

$dsn = 'mysql:dbname=sms_messenger;host=127.0.0.1:8889';
$user = 'root';
$password = 'root';

Это работает для Mac OS

Если вы не знаете свой номер порта mysql, Вы можете легко найти номер порта на домашней странице MAMP

ИЛИ

Введите следующую команду при запуске сервера MAMP для переключения терминала на mysql

OMBP:mamp Omal$ /Applications/MAMP/Library/bin/mysql --host=localhost -uroot -proot

Затем введите

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

Ответ 6

Эта ошибка, поскольку mysql пытается подключиться через неправильный файл сокета

попробуйте эту команду для серверов MAMP

cd /var/mysql && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

или

cd /tmp && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

и эти команды для серверов XAMPP

    cd /var/mysql && sudo ln -s /Applications/XAMPP/tmp/mysql/mysql.sock

или

    cd /tmp && sudo ln -s /Applications/XAMPP/tmp/mysql/mysql.sock

Ответ 7

Похоже, что служба mysql либо не работает, либо остановлена. вы можете запустить его, используя команду ниже (в Ubuntu):

service mysql start

Он должен работать! Если вы используете какую-либо другую операционную систему, чем Ubuntu, используйте соответствующий способ запуска mysql