Poprawność danych do połączenia z PostgreSQL

Witam,

mam taki kod:

<?php

$host = 'localhost';

$dbname = 'test';

$dbuser = 'postgres';

$dbpass = '';


$pdo = new PDO('postgres:host='.$host.';dbname='.$dbname, $dbuser, $dbpass);

$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


$stmt = $pdo -> prepare('SELECT a,b,c FROM baza');

$stmt -> execute();

$result = $stmt->fetchAll();


$i = 0;

foreach ($result as $point)

{

$points[$i]['a'] = $point['a'];

$points[$i]['b'] = $point['b'];

$points[$i]['c'] = $point['c'];

$i++;

}


echo json_encode($points);


?>

Jest on poprawny do połączenia z PostgreSQL?? Pierwszy raz chcę się połączyć z poziomu php z tą bazą i nie wiem teraz za bardzo czemu nie działa - czy dlatego że mam błąd w PHP, czy może dlatego że mam coś źle ustawione…

Dla MySQL takie rozwiązanie działało…

Z góry dzięki za pomoc,

Pozdrawiam Northwest

między innymi po to ktoś zaimplementował wyjątki, żebyś mógł sprawdzić co jest ew. nie tak z kodem

try {

$pdo = new PDO('postgres:host='.$host.';dbname='.$dbname, $dbuser, $dbpass);

}

catch (Exception e) {

echo e->getMessage();

}

sam DSN wydaje się być ok

P.S.

Po raz kolejny Ci powtórzę to samo: nie działaj w bazie na koncie administratora jeżeli nie musisz, nawet w celach testowych lepiej jest stworzyć chociażby testowego usera

fakt, zapomniałem zmienić użytkownia:/

taki błąd mi zwróciło:

Fatal error: Uncaught exception ‘PDOException’ with message ‘could not find driver’ in C:\wamp\www\points.php:7 Stack trace: #0 C:\wamp\www\points.php(7): PDO->__construct(‘postgres:host=l…’, ‘postgres’, ‘’) #1 {main} thrown in C:\wamp\www\points.php on line 7

czyli coś z postgresem:/

nie tyle z postgresem co z php jako takim, nie masz prawdopodobnie zainstalowanego sterownika postgresql do pdo (każdy SZBD potrzebuje osobnego sterownika). wypluj jeszcze phpinfo(); i się upewnij, ale to w tym szukał bym błędu…

hmmm, swoją drogą, ciekawe dlaczego catch nie złapał tego wyjątku :confused: możesz spróbować zmienić na

catch( PDOException e)

, ale to tak tylko dla testu bo Twojego problemu i tak nie rozwiąże

zmiana “postgres” na pgsql pomogła :slight_smile: teraz śmiga aż miło:)

a na catch mam błąd:

Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in C:\wamp\www\points.php on line 25

no tak, sterownik postgresqla się inaczej nazywa… mało to logiczne moim zdaniem niestety…

a co do tego wyjątku, to jak wygląda teraz kod w okół niego? ogólnie jeżeli coś może wyrzucić wyjątek (tak jak właśnie konstruktor PDO) to Twoim celem powinno być jego obsłużenie, jakiekolwiek zareagowanie na jego wystąpienie, bo w przeciwnym wypadku możesz dostać fatal error

<?php

$host = ‘localhost’;

$dbname = ‘test’;

$dbuser = ‘northwest’;

$dbpass = ‘northwest’;

try

{

$pdo = new PDO(‘pgsql:host=’.$host.’;dbname=’.$dbname, $dbuser, $dbpass);

$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo -> prepare(‘SELECT lat,lng,satellite FROM dane_gps ORDER by id DESC LIMIT 1’);

$stmt -> execute();

$result = $stmt->fetchAll();

$i = 0;

foreach ($result as $point)

{

$points[$i][‘lat’] = $point[‘lat’];

$points[$i][‘lng’] = $point[‘lng’];

$points[$i][‘satellite’] = $point[‘satellite’];

$i++;

}

echo json_encode($points);

}

catch (Exception e) {

echo e->getMessage();

}

?>

kod wygląda tak :slight_smile:

ps. wiesz jak googlemaps może centrować mapkę na punkcie??:slight_smile: