Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z połączeniem z Postgres z poziomu php
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
Dariomasta
Witam

Mój problem jest następujący. Mam serwer z Debianem na serwerze i łącze się z nim lokalnie za pomocą puttyego. W phpinfo(); wyświetla mi obsługę posgresa
(w php.ini dodałem "extension=pgsql.so" i "extension=php_pgsql.dll" oraz "extension_dir=/usr/lib/php5/20100525" po czym pgsql zaczał się wyświetlać w phpinfo()wink.gif
,a w bazie danych mam zrobioną bazę o nazwie gitgui3 jako root i haslo infundybula. Próbuję się połączyć za pomocą:

$db_handle=pg_connect("dbname=gitgui3 user=root password=infundybula host=localhost hostaddr=10.10.10.116 port=5432");
if(db_handle)
echo "Polaczono!";
else
echo "Nie polaczono!";

dostaję wciąż "Nie połączono!". Więc nie łączy. Ma ktoś jakiś pomysł co robię źlę i jak to naprawić?
Z góry dzięki za odpowiedź.


viking
Przydało by się żebyś wyświetlił komunikat błędu. Podejrzewam że w pg_hba.conf nie masz wpisu dla hosta.
Dariomasta
Sęk w tym, że nie dostaję żadnego komunikatu błędu. Jedynym efektem jaki dostaje jest "Nie połączono!" co wynika z faktu, że pg_connect zwraca
tylko true lub false jak mniemam. Nie dostaję żadnych errorów, ani tego typu rzeczy. Plik pg_hba.conf modyfikowałem, nie wiem czy dobrze:
generalnie w TYPE mam local albo host w DATABASE mam wszędzie all w USER mam wszędzie all, a w ADDRESS mam albo 10.10.10.116/5432 albo 127.0.0.1
albo ::1/128 a w METHOD mam trust albo md5. Czy to są dobre ustawienia czy złe? Proszę o dalszą pomoc.
viking
To chyba to było http://pl1.php.net/manual/en/function.pg-result-error.php
Przełącz się w takim razie testowo na PDO i zgarnij wyjątek. Nie pamiętam czy w logach php też czegoś nie było error_reporting(-1)
Dariomasta
A możesz napisać kod odnośnie tego? Użyłem tego kodu podanego w przykładzie ze strony którą podałeś czyli:
  1. <?php
  2. $db_handle=pg_connect("dbname=gitgui3 user=root password=infundybula host=localhost hostaddr=10.10.10.116");
  3. $res1=pg_get_result($db_handle);
  4. if($db_handle)
  5. echo "Polaczono!";
  6. else
  7. echo "Nie polaczono!";
  8. ?>


Nie wiem czy o to Tobie chodziło, ale dodam, że po tej modyfikacji dalej się nic nie dzieje. A odnośnie tego PDO to nie wiem o co chodzi. Najlepiej napisz kod
i napisz jasno co i jak mam robić.

Pogrzebałem trochę w Debianie i znalazłem plik z error-logami i tam w pliku error.log mam taki oto wpis:
[error] [client 10.10.10.4] PHP Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server:
Connection refused\n\tIs the server running on host 10.10.10.116 and accepting\n\tTCP/IP connections on port 5432? in var/www/test.php on line 20

Czyli nie może podłączyć się do Postgresa, ale dlaczego? I jak to rozwiązać?

Co do PDO to też trochę poczytałem na stronach:
http://pl1.php.net/manual/en/class.pdo.php
http://pl1.php.net/manual/en/ref.pdo-pgsql.connection.php
http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO

i wpisałem taki oto kod:

  1. <?php
  2. try
  3. {
  4. $db_handle=new PDO('pgsql:host=localhost;dbname=gitgui3','root','infundybula');
  5. echo 'Nawiazane polaczenie!';
  6. }
  7. catch(PDOException $e)
  8. {
  9. echo 'Polaczenie nie moglo byc nawiazane'.$e->getMessage();
  10. }
  11. ?>


Jednak dostaję taki oto błąd:

"Polaczenie nie moglo być nawiązaneSQLstate[08006][7] KATASTROFALNY: autoryzacja haslem nie powiodła się dla użytkownika "root""

Wskazywaloby to, że jest błędne hasło jednak sprawdzałem i jest poprawne.(Podaje użytkownika i haslo z logowania do systemu Debian, z którego
wchodzę do bazy danych i mam dostęp do baz). Podawałem też inne usery i passwordy np. postgres który jest domyślny, ale dostaję ten sam błąd.

Co w takim razie robię źle? Proszę o dalszą pomoc.
viking
W stopce mam artykuł o PDO. Kopiuj wklej podstawiając pod $dsn właściwe dane dla hosta.
mmmmmmm
Daj tak:
Kod
$dbconn = pg_connect("dbname=gitgui3 user=root password=infundybula host=localhost")    or die('Nie można nawiązać połączenia: ' . pg_last_error());
Dariomasta
mmmmmmm wpisałem tak jak mówisz, ale dostaję tylko:

"Nie można nawiazac polaczenia: "

ta funkcja pg_last_error() nie wywala żadnego błędu w tym przypadku po prostu nic się nie dzieje.

Wyedytowałem poprzedni post, w nim też napisałem co się dzieje i na czym aktualnie się zatrzymałem.
viking
W postgresql.conf dodaj jeszcze: listen_addresses = 'localhost, 10.10.10.116'
Dariomasta
viking wpisałem tak jak mówisz w postgresql.conf :
listen_addresses = 'localhost, 10.10.10.116'
Odkomentowałem tą linijkę bo była zahaszowana i dodałem 10.10.10.116,
ale dalej ten sam błąd mi wyskakuje. Zrestartowałem apache po tym, ale też nic.

Co ciekawe, jeśli wpisuję
  1. $db_handle=new PDO('pgsql:host=10.10.10.116;dbname=gitgui3','root','infundybula');


Dostaję błąd:
could not connect to server: Connection refused\n\tIs the server running on host 10.10.10.116 and accepting\n\tTCP/IP connections on port 5432?

Natomiast jeśli wpisuję
  1. $db_handle=new PDO('pgsql:host=localhost;dbname=gitgui3','root','infundybula');


Dostaję błąd:
[08006][7] KATASTROFALNY: autoryzacja haslem nie powiodła się dla użytkownika "root""

O co chodzi? Localhost i 10.10.10.116 to chyba powinno być to samo...
viking
O ile w /etc/hosts masz takie mapowanie. I w postgresie domyślnie użytkowniekiem jest 'postgres' nie root. Zresetowałeś postgresa oczywiście?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.