Соединение через сокет MySQL с Zend Framework - PullRequest
0 голосов
/ 06 августа 2009

Я недавно начал использовать Zend Framework. Я начал разработку на своем локальном сервере XAMPP, который прошел нормально, но при загрузке в учетную запись 1and1 я получаю следующую ошибку:

Сообщение: SQLSTATE [HY000] [2002] Не могу подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2)

Я попытался изменить строку resources.db.params.unix_socket в моем файле application.ini на другие, упомянутые в phpinfo, но безуспешно. Я нашел здесь , что кто-то ответил

Является ли сервер MySQL на том же хосте как веб-приложение? Если бы не ты не может использовать сокетное соединение, и нужно будет подключиться через TCP.

Я думаю, что это так с моим веб-хостинга. Как я могу изменить ZF для подключения через TCP вместо этого? Я сейчас использую PDO_MYSQL.

Ответы [ 3 ]

4 голосов
/ 06 августа 2009

Способ подключения к MySQL зависит от параметров, передаваемых в mysql_connect () . Если вы передадите ему путь к файлу, т.е. /var/run/mysqld/mysqld.sock, он попытается подключиться через сокет. Если вы передадите ему имя хоста, он попытается установить TCP-соединение.

Вам необходимо найти имя хоста (или IP-адрес) сервера MySQL и подключиться к нему следующим образом:

mysql_connect('127.0.0.1:3306',$username,$password);

Коэффициенты для ZF, вы можете просто указать это в файле конфигурации, где вы храните настройки базы данных, или когда вы подключаетесь к базе данных, используя параметр host:

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));

Редактировать : Если вы передаете правильное имя хоста / порт в качестве параметра хоста в mysql_connect() и получаете это сообщение, то это, скорее всего, проблема конфигурации сервера.

Попробуйте изменить настройку mysql.default_socket в php.ini или в верхней части кода приложения, используя ini_set ()

ini_set('mysql.default_socket','/path/to/real/socket.sock');

Вы должны выяснить, где находится файл сокета. Часто это /var/lib/mysql/mysql.sock, но я думаю, что это зависит от системы.

1 голос
/ 07 августа 2009

Я покинул линию:

defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));

в моем index.php как есть, но изменил public / .htaccess на

SetEnv APPLICATION_ENV production

Похоже, что .htaccess не читался. Я изменил оператор else в index.php на «production», чтобы использовать настройки производственной базы данных, и это сработало. Довольно расстраивает. Интересно, почему переменная окружения не читалась. Спасибо за вашу помощь.

0 голосов
/ 12 февраля 2015

Zend Framework имеет опцию в параметрах db unix_socket, просто используйте ее

 $config= array(
 'db' => array(
'host'   => 'localhost',
'username' => 'user',
'password' => 'pass',
'dbname' => 'dbname',
'dbprefix' => '',
'unix_socket' => '/var/lib/mysqld/mysqld.sock'
  )
);
...