Używanie rozszerzeń PHP PostgreSQL (pgsql, PDO_PGSQL) w ServBay
ServBay to potężne zintegrowane lokalne środowisko do tworzenia aplikacji WWW, które natywnie wspiera bazę danych PostgreSQL oraz dostarcza niezbędne rozszerzenia PHP, umożliwiając programistom łatwe połączenie i obsługę PostgreSQL w swoich aplikacjach PHP. ServBay dla wszystkich obsługiwanych wersji PHP ma wstępnie zainstalowane i domyślnie aktywowane rozszerzenia pgsql
oraz PDO_PGSQL
.
Wprowadzenie do rozszerzeń PHP PostgreSQL
PostgreSQL to zaawansowany, otwartoźródłowy obiektowo-relacyjny system bazodanowy, znany ze swojej stabilności, integralności danych oraz bogatego zestawu funkcji. Do interakcji z bazą danych PostgreSQL w PHP wymagane są odpowiednie rozszerzenia. ServBay udostępnia dwa główne rozszerzenia:
- Rozszerzenie
pgsql
: Jest to natywne rozszerzenie PHP dla PostgreSQL, dostarczające szereg funkcji zaczynających się odpg_
(np.pg_connect
,pg_query
,pg_fetch_assoc
) do bezpośredniej obsługi bazy PostgreSQL. Umożliwia ono korzystanie ze specyficznych funkcji PostgreSQL. - Sterownik
PDO_PGSQL
: Jest częścią rozszerzenia PHP Data Objects (PDO), przeznaczoną do połączeń z PostgreSQL. PDO zapewnia jednolitą warstwę abstrakcji dostępu do baz danych, pozwalając na użycie spójnego API dla różnych baz (PostgreSQL, MySQL, SQLite i innych), co sprzyja pisaniu przenośnego kodu.
Rozszerzenia PHP PostgreSQL w ServBay
ServBay automatycznie instaluje dla każdej obsługiwanej wersji PHP rozszerzenia pgsql
oraz sterownik PDO_PGSQL
i zapewnia, że są one domyślnie aktywowane.
Jak włączyć rozszerzenia PostgreSQL
W ServBay nie musisz wykonywać żadnych ręcznych kroków, by włączyć pgsql
lub PDO_PGSQL
. Są już skonfigurowane i możesz ich od razu używać w swoim kodzie PHP.
Korzystanie z PostgreSQL w kodzie PHP
Po aktywacji stosownych rozszerzeń możesz korzystać z funkcji pgsql
lub obiektów PDO, by łączyć się i pracować z bazą PostgreSQL w PHP.
Wymagania wstępne:
- Usługa PostgreSQL powinna być uruchomiona w ServBay.
- Założono, że została utworzona baza danych o nazwie
servbay_db
. - Założono, że istnieje użytkownik
servbay_user
z hasłemyour_password
oraz posiada odpowiednie uprawnienia do bazyservbay_db
. - W bazie
servbay_db
powinien znajdować się stółusers
z kolumnami:id
(SERIAL PRIMARY KEY),name
(VARCHAR),email
(VARCHAR),age
(INT).
Do wykonania powyższych ustawień możesz użyć wbudowanego w ServBay narzędzia adminer lub innych menedżerów baz danych, takich jak DBeaver czy pgAdmin.
Poniżej znajdziesz przykłady kodu pokazujące dwie metody łączenia się z bazą i wykonywania podstawowych operacji:
Przykładowy kod (metoda z rozszerzeniem pgsql
)
php
<?php
// --- Przykład z rozszerzeniem pgsql ---
// Parametry połączenia z bazą danych
$host = "127.0.0.1"; // lub 'localhost'
$port = "5432"; // Domyślny port PostgreSQL
$dbname = "servbay_db";
$user = "servbay_user";
$password = "your_password"; // Zamień na swoje prawdziwe hasło
// Budowanie łańcucha połączeniowego
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// Łączenie z bazą danych PostgreSQL
$conn = pg_connect($conn_string);
// Sprawdzenie czy połączenie się powiodło
if (!$conn) {
die("pgsql Connection failed: " . pg_last_error());
}
echo "pgsql Connected successfully<br>";
// Wstawianie danych (uwaga: pg_query nie wspiera bezpośrednio bindowania parametrów — należy odpowiednio filtrować dane lub użyć pg_query_params)
$name = "ServBay Pgsql";
$email = "[email protected]";
$age = 7;
// Bezpieczne zapytanie z użyciem pg_query_params
$query = "INSERT INTO users (name, email, age) VALUES ($1, $2, $3)";
$result = pg_query_params($conn, $query, array($name, $email, $age));
if ($result) {
echo "pgsql: New record created successfully<br>";
} else {
echo "pgsql Error: " . pg_last_error($conn) . "<br>";
}
// Pobieranie danych
$query = "SELECT id, name, email, age FROM users WHERE name = $1";
$result = pg_query_params($conn, $query, array('ServBay Pgsql'));
if ($result) {
echo "pgsql Queried data:<br>";
// Sprawdzanie, czy są jakieś wiersze z wynikiem
if (pg_num_rows($result) > 0) {
// Pobieranie wszystkich wierszy jako tablica asocjacyjna
$data = pg_fetch_all($result, PGSQL_ASSOC);
foreach ($data as $row) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. " - Age: " . $row["age"]. "<br>";
}
} else {
echo "pgsql: 0 results found<br>";
}
} else {
echo "pgsql Error querying data: " . pg_last_error($conn) . "<br>";
}
// Zamknięcie połączenia z bazą
pg_close($conn);
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Przykładowy kod (metoda z PDO_PGSQL
)
php
<?php
// --- Przykład PDO_PGSQL ---
// Parametry połączenia z bazą danych
$host = '127.0.0.1'; // lub 'localhost'
$port = 5432; // Domyślny port PostgreSQL
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Zamień na swoje prawdziwe hasło
// Data Source Name (DSN) dla PostgreSQL
$dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
// Opcje PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Rzucaj wyjątki zamiast ostrzeżeń
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Domyślnie pobieraj tablice asocjacyjne
// PDO::ATTR_EMULATE_PREPARES => false, // Dla PostgreSQL zwykle nie trzeba tego ustawiać
];
try {
// Utworzenie instancji połączenia PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO_PGSQL Connected successfully<br>";
// Wstawianie danych (z użyciem zapytań przygotowanych)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Pgsql';
$email = '[email protected]';
$age = 12;
// Bindowanie parametrów i wykonanie zapytania
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO_PGSQL: New record created successfully<br>";
// Pobieranie danych
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// Pobierz wszystkie wyniki
$users = $stmt->fetchAll(); // Domyślnie FETCH_ASSOC
if ($users) {
echo "PDO_PGSQL Queried data:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Name: " . $row['name'] . " - Email: " . $row['email'] . " - Age: " . $row['age'] . "<br>";
}
} else {
echo "PDO_PGSQL: 0 results found<br>";
}
} catch (\PDOException $e) {
// Obsługa i wyświetlanie błędów połączenia lub zapytań
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// Połączenia PDO zwykle zamykają się automatycznie na końcu skryptu, nie trzeba jawnie wywoływać close()
// $pdo = null; // Można ustawić null, by zamknąć połączenie
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Umieszczanie kodu: Zapisz wybrany powyżej kod jako plik .php
(np. pg_test_native.php
lub pg_test_pdo.php
) i umieść go w katalogu głównym swojej strony ServBay (np. /Applications/ServBay/www/myproject/
). Następnie uzyskaj do niego dostęp przez przeglądarkę, wchodząc pod odpowiedni adres URL (np. http://myproject.servbay.demo/pg_test_native.php
). Upewnij się, że Twoja strona oraz usługa PostgreSQL są poprawnie skonfigurowane i uruchomione w ServBay.
Najczęściej zadawane pytania (FAQ)
Q: Czy muszę ręcznie instalować rozszerzenia PHP dla PostgreSQL (pgsql
lub PDO_PGSQL
) w ServBay?
A: Nie, nie ma takiej potrzeby. ServBay automatycznie instaluje i aktywuje te rozszerzenia we wszystkich zarządzanych przez siebie wersjach PHP. Możesz od razu korzystać z nich w swoim kodzie, bez instalacji i dodatkowej konfiguracji.
Q: Czym się różni rozszerzenie pgsql
od sterownika PDO_PGSQL
? Którego użyć?
A:
- Rozszerzenie
pgsql
daje dostęp do zestawu funkcji specyficznych dla PostgreSQL (np.pg_connect
,pg_query_params
). Jeżeli chcesz korzystać z zaawansowanych możliwości PostgreSQL, może być odpowiedniejsze. PDO_PGSQL
jest częścią warstwy abstrakcji PDO. Dzięki PDO Twój kod łatwiej przenieść na inne bazy w przyszłości (np. MySQL) — minimalizuje to zmiany przy migracji. PDO wymusza też używanie zapytań przygotowanych, co jest zalecaną dobrą praktyką bezpieczeństwa.- Rekomendacja: Dla nowych projektów oraz tam, gdzie zależy Ci na przenośności i bezpieczeństwie, zaleca się wybór
PDO_PGSQL
. W przypadku utrzymania starszego kodu lub wymogu specyficznych funkcji PostgreSQL, możesz użyćpgsql
.
Q: Skąd uzyskać dane do połączenia z usługą PostgreSQL w ServBay (host, port, użytkownik, hasło, nazwa bazy)?
A:
- Host: Zwykle
127.0.0.1
lublocalhost
. - Port: Standardowy port PostgreSQL to
5432
. Możesz sprawdzić faktyczny port w panelu zarządzania pakietem PostgreSQL w ServBay. - Użytkownik / hasło / nazwa bazy: To dane, które samodzielnie tworzysz w usłudze PostgreSQL. Do zarządzania bazą i użytkownikami skorzystaj z adminera wbudowanego w ServBay lub innych narzędzi (np. pgAdmin, DBeaver).
Q: Jak zabezpieczyć się przed SQL injection używając rozszerzenia pgsql
?
A: Unikaj bezpośredniego wstawiania danych od użytkownika do zapytań SQL. Używaj funkcji pg_query_params()
, która pozwala przekazywać parametry osobno od ciągu zapytania — parametry zostaną bezpiecznie obsłużone przez sterownik. Ewentualnie, przed użyciem pg_query()
, zastosuj funkcje pg_escape_string()
lub pg_escape_literal()
dla danych wejściowych (choć zwykle lepiej używać pg_query_params
).
Podsumowanie
ServBay, dzięki wstępnie zainstalowanym i domyślnie aktywowanym rozszerzeniom pgsql
oraz PDO_PGSQL
dla PHP, maksymalnie upraszcza proces łączenia się z PostgreSQL w lokalnym środowisku na macOS. Programista nie musi martwić się instalacją i konfiguracją rozszerzeń — wystarczy wybrać odpowiednią metodę (zalecane PDO ze względu na przenośność i bezpieczeństwo), aby wygodnie łączyć się z usługą PostgreSQL zarządzaną przez ServBay. Pozwala to skupić się na logice aplikacji i efektywnie wykorzystać moc PostgreSQL do budowy niezawodnych aplikacji webowych.