Подключение к процессу 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"