2012-06-05 2 views
1

Мне нужно перенести большое приложение PHP с базой данных PostgreSQL в Rails. Это OS X Lion Macbook Pro, используя существующую установку Apache + PHP.OS X Lion + PHP + PostgreSQL, pg_connect ничего не возвращает

Я установил PostgreSQL через Homebrew. Предположим, что хост является «localhost», имя пользователя «my_username», база данных по умолчанию - «my_db». Пароль пуст. Вот результат:

я могу получить доступ к базе данных просто отлично из командной строки с

psql -h localhost -U my_username -p 5432 my_db 

Нет проблем. Это также работает:

psql -U my_username my_db 

И никаких проблем. И я могу легко добраться до базы данных, используя Rails, с этими настройками:

adapter: postgresql 
encoding: sql_ascii 
template: template0 
database: my_db 
pool: 5 
username: my_username 
password: 

Это все работает нормально. Но в PHP, когда я делаю

pg_connect("host=localhost port=5432 dbname=my_db user=my_username") or die(pg_last_error()); 

Я получаю сообщение:

LANG_FATAL_ERROR: LANG_DB_COULD_NOT_CONNECT 
Access denied for user 'my_username'@'localhost' (using password: YES) 

И если удалить "хост =" от линии, в результате чего:

pg_connect("port=5432 dbname=my_db user=my_username") or die(pg_last_error()); 

или

pg_connect("dbname=my_db user=my_username") or die(pg_last_error()); 

Я ничего не понимаю. pg_connect возвращает false, указывая на отсутствие соединения, но ошибок нет! pg_last_error() ничего не возвращает.

Я также попытался добавить пароль = '' в строку соединения, без результатов.

Я очень старался найти ссылку на эту проблему в Stack Overflow, Google и т. Д. И не повезло. Есть несколько вопросов с похожими заголовками в Stack Overflow, но не для этой конкретной проблемы. Все, что я нашел в «Сети», должно было скомпилировать pgsql.so для себя и убедиться, что расширение указано в php.ini. Я сделал это с нулевыми результатами.

Очевидно, что это не проблема с самим PostgreSQL, а что-то связанное с PHP.

Пожалуйста, помогите. Благодарю.

ответ

1

Это сообщение об ошибке:

Доступ запрещен для пользователя 'my_username' @ 'локальный' (используя пароль: ДА)

является хорошо известным MySQL сообщение об ошибке, это не связано к вызову pg_connect().

Также обратите внимание, что pg_last_error() не может выводить ничего полезного для сбоя соединения, поскольку он предполагает существующее соединение. Сообщение об ошибке, связанное с сбоем подключения, необходимо искать в выводе ошибки PHP.

+0

Я знаю, что это похоже на сообщение об ошибке MySQL. Но посмотрите еще раз на PHP: вызываемая функция - pg_connect().Он не имеет ничего общего с MySQL. Тем не менее, я все-таки выяснил это. Спасибо за попытку. –

+0

@ LonnyEachus «В конце концов я все выяснил, хотя ...« Конечно, было бы хорошо, если бы вы поделились с остальными из нас! В конце концов, это то, о чем вы просите нас, верно? –

Смежные вопросы