Подключение к процессу SQL с Zend

Я пытаюсь подключить свое приложение Zend к процессу MySQL, работающему на общем сервере. Базовая конфигурация должна быть в порядке, так как она работает с сервером LAMP.

Проблема в том, что мне нужно указать хост как процесс sql: myprocess.db, скорее, чем localhost:

resources.db.adapter = PDO_MYSQL
resources.db.params.charset = "utf8"
resources.db.params.host = mysqlprocess.db
resources.db.params.username = username
resources.db.params.password = password
resources.db.params.dbname = dbname

Однако, когда я делаю, я получаю это:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: 
Can't connect to local MySQL server through socket 'please_see_the_faq' (2) 
in /f5/metamusic/protected/application/controllers/SearchController.php on line 418

Хост, который я использую, это NearlyFreeSpeech, и это сообщение, очевидно, выдается при попытке подключения к SQL без указания интересующего вас процесса: http://faq.nearlyfreespeech.net/section/mysql/mysqllocalhost

Используя те же детали и mysql_connect($server, $user) работает без проблем, поэтому похоже, что Zend почему-то не использует правильный параметр хоста.

Есть идеи, что не так? Любая помощь приветствуется.

3 ответа

Решение

Я публикую свое возможное решение здесь для дальнейшего использования:

Оказывается, соединение с базой данных уже работало. Тем не менее, мой призыв к mysql_real_escape_string() не удалось, и в результате сообщение об ошибке предположил, что все соединение с базой данных не удалось.

Решение было просто заменить вышеупомянутый вызов Zend_DB_Adapter's quote()и вдруг все работает.

Почему это работает на компьютере LAMP, а не на общем сервере, я понятия не имею. Пока что это достаточно хорошее решение!

Попробуйте использовать

resources.db.params.host = myprocess.db

Хост в конфигурации db должен указывать на сервер базы данных. localhost или же 127.0.0.1 являются ссылками для базы данных, находящейся на том же сервере, что и приложение. В среде хостинга у вас обычно есть сервер на удаленном сервере, поэтому хост должен быть либо IP-адресом, либо DNS-именем хоста.

Проверьте второй вопрос в FAQ.

Обновить
Мой плохой, то есть про DSN, а не DNS. Тем не менее, вот в чем проблема. resources.db.params.host Директива в конфиге ожидает ссылку на сервер базы данных и myprocess.db не является ни DNS-именем, ни IP-адресом. Вам, вероятно, нужен локальный хост для этого, но тогда вам все равно будет не хватать DSN. В настоящее время я не вижу, как вы устанавливаете DSN в PHP для MySQL и, следовательно, Zend. Посмотрите на этот MYSQL DSN.

Обновление 2 Вы правильно с сокетом, и что это связано. Я думаю, что проблема в адаптере Zend PDO_MYSQL. Zend направляет это непосредственно в PDO(). Это дополнительные параметры конфигурации, о которых я упоминал выше (MYSQL DSN), которых нет в реализации Zend. Хотя адаптер PDO_MYSQL переопределяет метод connect(), он не ищет эти параметры.

Тем не менее, есть еще один адаптер mysqli который подключается непосредственно к MySQL и фактически так же, как ваш тест с mysql_connect(), Оно использует mysqli_real_connect() вместо этого и это соединение может понимать имя процесса для сокета. Итак, вы можете попробовать следующее в вашей конфигурации:

resources.db.adapter = "mysqli"
Другие вопросы по тегам