Verwendung der PHP PostgreSQL Erweiterungen (pgsql, PDO_PGSQL) in ServBay
ServBay ist eine leistungsstarke integrierte lokale Webentwicklungsumgebung mit integrierter Unterstützung für PostgreSQL-Datenbanken und allen notwendigen Erweiterungen für PHP. Damit können Entwickler in PHP-Anwendungen komfortabel auf PostgreSQL-Datenbanken zugreifen und diese steuern. Für alle unterstützten PHP-Versionen sind die Erweiterungen pgsql
und PDO_PGSQL
in ServBay vorinstalliert und standardmäßig aktiviert.
Einführung in die PHP PostgreSQL Erweiterungen
PostgreSQL ist ein leistungsfähiges, quelloffenes objektrelationales Datenbanksystem, das sich durch Stabilität, Datenintegrität und einen umfangreichen Funktionsumfang auszeichnet. Um in PHP mit PostgreSQL-Datenbanken zu arbeiten, benötigen Sie entsprechende PHP-Erweiterungen. ServBay stellt vor allem zwei Erweiterungen bereit:
pgsql
-Erweiterung: Dies ist die native PostgreSQL-Erweiterung für PHP, die eine Reihe von Funktionen (beginnend mitpg_
, wie z. B.pg_connect
,pg_query
,pg_fetch_assoc
usw.) zur direkten Interaktion mit PostgreSQL bietet. Entwickler können damit auf spezifische Features von PostgreSQL zugreifen.PDO_PGSQL
-Treiber: Bestandteil der PHP Data Objects (PDO), speziell für die Verbindung zu PostgreSQL. PDO bietet eine einheitliche Datenbankabstraktionsebene und ermöglicht mit einem einheitlichen API den Zugriff auf verschiedene Datenbanken (PostgreSQL, MySQL, SQLite u. a.), was zu portablerem Code führt.
PHP PostgreSQL Erweiterungen in ServBay
ServBay stellt sicher, dass für jede unterstützte PHP-Version sowohl die pgsql
-Erweiterung als auch der PDO_PGSQL
-Treiber vorinstalliert und standardmäßig aktiviert sind.
So aktivieren Sie die PostgreSQL Erweiterungen
In ServBay müssen Sie keine manuellen Schritte durchführen, um die Erweiterungen pgsql
oder PDO_PGSQL
zu aktivieren. Sie sind bereits für Sie konfiguriert und können sofort in Ihren PHP-Skripten verwendet werden.
Verwendung von PostgreSQL in PHP
Sobald die entsprechenden Erweiterungen aktiv sind, können Sie in Ihren PHP-Skripten entweder die pgsql
-Funktionen oder das PDO-Objekt einsetzen, um auf PostgreSQL-Datenbanken zuzugreifen und mit ihnen zu arbeiten.
Voraussetzungen:
- Stellen Sie sicher, dass der PostgreSQL-Dienst in ServBay läuft.
- Es wird angenommen, dass eine Datenbank namens
servbay_db
existiert. - Es wird angenommen, dass ein Benutzer namens
servbay_user
mit dem Passwortyour_password
vorhanden ist und die erforderlichen Rechte fürservbay_db
besitzt. - In der Datenbank
servbay_db
gibt es eine Tabelleusers
mit den Spalten:id
(SERIAL PRIMARY KEY),name
(VARCHAR),email
(VARCHAR),age
(INT).
Um diese Einstellungen vorzunehmen, können Sie das integrierte Adminer-Tool von ServBay oder andere Tools wie DBeaver oder pgAdmin verwenden.
Nachfolgend Beispiele, wie Sie mit beiden Methoden eine Verbindung zur Datenbank herstellen und grundlegende Operationen ausführen können:
Beispielcode (pgsql
-Erweiterung)
php
<?php
// --- Beispiel für die Verwendung der pgsql-Erweiterung ---
// Datenbank-Verbindungsparameter
$host = "127.0.0.1"; // oder 'localhost'
$port = "5432"; // Standard-Port für PostgreSQL
$dbname = "servbay_db";
$user = "servbay_user";
$password = "your_password"; // Bitte Ihr tatsächliches Passwort einsetzen
// Verbindungs-String zusammenbauen
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// Verbindung zur PostgreSQL-Datenbank herstellen
$conn = pg_connect($conn_string);
// Verbindung prüfen
if (!$conn) {
die("pgsql Verbindung fehlgeschlagen: " . pg_last_error());
}
echo "pgsql Erfolgreich verbunden<br>";
// Daten einfügen (Achtung: pg_query unterstützt kein Binding – gegen SQL-Injektion sollte man Werte manuell escapen oder besser pg_query_params verwenden)
$name = "ServBay Pgsql";
$email = "pgsql@servbay.demo";
$age = 7;
// Sicheres, parametrisiertes Insert mit 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: Neuer Datensatz erfolgreich eingefügt<br>";
} else {
echo "pgsql Fehler: " . pg_last_error($conn) . "<br>";
}
// Daten abfragen
$query = "SELECT id, name, email, age FROM users WHERE name = $1";
$result = pg_query_params($conn, $query, array('ServBay Pgsql'));
if ($result) {
echo "pgsql Abfrage-Ergebnisse:<br>";
// Prüfen, ob Zeilen zurückgegeben wurden
if (pg_num_rows($result) > 0) {
// Alle Zeilen als assoziatives Array holen
$data = pg_fetch_all($result, PGSQL_ASSOC);
foreach ($data as $row) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. " - Alter: " . $row["age"]. "<br>";
}
} else {
echo "pgsql: 0 Ergebnisse gefunden<br>";
}
} else {
echo "pgsql Fehler bei der Abfrage: " . pg_last_error($conn) . "<br>";
}
// Verbindung schließen
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
Beispielcode (PDO_PGSQL
-Erweiterung)
php
<?php
// --- Beispiel für die Verwendung von PDO_PGSQL ---
// Datenbank-Verbindungsparameter
$host = '127.0.0.1'; // oder 'localhost'
$port = 5432; // Standard-Port für PostgreSQL
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Bitte Ihr tatsächliches Passwort einsetzen
// Datenquellenname (DSN) für PostgreSQL
$dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
// PDO-Optionen
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Fehler als Exception werfen
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Standardmäßig als assoziatives Array holen
// PDO::ATTR_EMULATE_PREPARES => false, // Für PostgreSQL üblicherweise nicht notwendig
];
try {
// PDO-Instanz erstellen
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO_PGSQL Erfolgreich verbunden<br>";
// Daten einfügen (mit prepared Statements)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Pgsql';
$email = 'pdo_pgsql@servbay.demo';
$age = 12;
// Parameter binden und ausführen
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO_PGSQL: Neuer Datensatz erfolgreich eingefügt<br>";
// Daten abfragen
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// Ergebnisse holen
$users = $stmt->fetchAll(); // Standardmäßig FETCH_ASSOC
if ($users) {
echo "PDO_PGSQL Abfrage-Ergebnisse:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Name: " . $row['name'] . " - Email: " . $row['email'] . " - Alter: " . $row['age'] . "<br>";
}
} else {
echo "PDO_PGSQL: 0 Ergebnisse gefunden<br>";
}
} catch (\PDOException $e) {
// Fehler beim Verbinden oder Abfragen abfangen und anzeigen
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// Die PDO-Verbindung wird am Ende des Skripts gewöhnlich automatisch geschlossen, ein expliziter close() ist nicht nötig
// $pdo = null; // Alternativ kann man sie auf null setzen, um sie explizit zu schließen
?>
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
Code bereitstellen: Speichern Sie eines der obigen Beispiele als .php
-Datei (z. B. pg_test_native.php
oder pg_test_pdo.php
) im ServBay-Webverzeichnis (z. B. /Applications/ServBay/www/myproject/
). Anschließend können Sie die Datei per Browser aufrufen (z. B. http://myproject.servbay.demo/pg_test_native.php
). Stellen Sie sicher, dass Ihre Website sowie der PostgreSQL-Dienst in ServBay korrekt konfiguriert und aktiv sind.
Häufig gestellte Fragen (FAQ)
F: Muss ich die PHP PostgreSQL Erweiterungen (pgsql
oder PDO_PGSQL
) in ServBay manuell installieren?
A: Nein. ServBay liefert für alle von ihm verwalteten PHP-Versionen sowohl die pgsql
-Erweiterung als auch den PDO_PGSQL
-Treiber vorinstalliert und aktiviert aus. Sie können diese direkt in Ihrem Code verwenden, ohne zusätzliche Installation oder Konfiguration.
F: Was ist der Unterschied zwischen der pgsql
-Erweiterung und dem PDO_PGSQL
-Treiber? Welche sollte ich verwenden?
A:
- Die
pgsql
-Erweiterung stellt eine PostgreSQL-spezifische Funktionssammlung bereit (z. B.pg_connect
,pg_query_params
). Sie eignet sich, wenn Sie gezielte PostgreSQL-Funktionalitäten benötigen. PDO_PGSQL
ist Teil des PDO-Abstraktionslayers. PDO sorgt dafür, dass Ihre Datenbankaufrufe portabler werden: Ein späterer Wechsel zu einer anderen Datenbank (wie MySQL) ist dann mit weniger Aufwand möglich. PDO nutzt zudem vorbereitete Statements, was als moderne Sicherheitsbest-Practice in PHP gilt.- Empfehlung: Für neue Projekte oder Projekte, bei denen Wert auf Portabilität und Sicherheit gelegt wird, empfehlen wir die Verwendung von
PDO_PGSQL
. Müssen Sie ein bestehendes Projekt pflegen oder bestimmtepgsql
-Funktionen nutzen, können Sie diepgsql
-Erweiterung verwenden.
F: Wie erhalte ich die notwendigen Zugangsdaten für die PostgreSQL-Instanz in ServBay (Host, Port, Nutzername, Passwort, Datenbankname)?
A:
- Host: In der Regel
127.0.0.1
oderlocalhost
. - Port: Der Standard-Port für PostgreSQL ist
5432
. Die tatsächlich verwendete Portnummer können Sie im PostgreSQL-Paketmanager von ServBay überprüfen. - Benutzername / Passwort / Datenbankname: Diese richten Sie im PostgreSQL-Dienst von ServBay selbst ein. Nutzen Sie dafür z. B. den mitgelieferten Adminer, pgAdmin oder DBeaver um Datenbanken, Benutzer sowie deren Passwörter und Berechtigungen festzulegen.
F: Wie kann ich mit der pgsql
-Erweiterung SQL-Injektionen verhindern?
A: Fügen Sie niemals Benutzereingaben direkt in ein SQL-Statement ein. Verwenden Sie immer die Funktion pg_query_params()
, mit der SQL und Parameter getrennt übergeben werden, sodass die Datenbank-Treiber die Parametereinbindung sicher übernehmen. Falls Sie aus bestimmten Gründen auf pg_query()
zurückgreifen, müssen Sie alle Benutzereingaben mit pg_escape_string()
oder pg_escape_literal()
explizit escapen (empfohlen wird jedoch in jedem Fall pg_query_params
).
Fazit
ServBay vereinfacht durch die vorinstallierten und standardmäßig aktivierten PHP-Erweiterungen pgsql
und PDO_PGSQL
den Zugriff auf PostgreSQL-Datenbanken in der lokalen macOS-Entwicklungsumgebung erheblich. Entwickler müssen sich nicht mit Installation oder Konfiguration von Erweiterungen befassen und können je nach Projektanforderungen flexibel die passende Lösung wählen (für bessere Kompatibilität und Sicherheit empfehlen wir PDO). So können Sie sich vollkommen auf die Geschäftslogik Ihrer Anwendung konzentrieren und effizient robuste Web-Anwendungen mit der Leistungsfähigkeit von PostgreSQL erstellen.