Подключение к процессу SQL с Zend - PullRequest
0 голосов
/ 05 августа 2011

Я пытаюсь подключить свое приложение 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#mysqllocalhost

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

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

Ответы [ 3 ]

0 голосов
/ 13 августа 2011

Хост в конфигурации 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"
0 голосов
/ 13 августа 2011

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

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

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

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

0 голосов
/ 05 августа 2011

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

resources.db.params.host = myprocess.db

...