PHP PostgreSQL-extensies gebruiken in ServBay (pgsql, PDO_PGSQL)
ServBay is een krachtige, geïntegreerde lokale webontwikkelomgeving met ingebouwde ondersteuning voor PostgreSQL-databases. Voor PHP zijn de benodigde extensies vooraf geïnstalleerd, zodat ontwikkelaars eenvoudig PostgreSQL-databases kunnen koppelen en beheren vanuit hun PHP-applicaties. ServBay installeert de pgsql
en PDO_PGSQL
extensies standaard voor alle ondersteunde PHP-versies en schakelt deze automatisch in.
Introductie tot PHP PostgreSQL-extensies
PostgreSQL is een krachtig, open-source object-relationeel databasesysteem, bekend om zijn stabiliteit, dataconsistentie en uitgebreide functionaliteit. Voor interactie met PostgreSQL-databases in PHP zijn specifieke extensies vereist. ServBay levert standaard twee belangrijke extensies:
pgsql
extensie: Dit is de native PostgreSQL-extensie voor PHP en biedt een reeks functies die beginnen metpg_
(zoalspg_connect
,pg_query
,pg_fetch_assoc
, enz.) om direct te werken met PostgreSQL-databases. Zo kunnen ontwikkelaars optimaal profiteren van de unieke mogelijkheden van PostgreSQL.PDO_PGSQL
driver: Dit is onderdeel van PHP Data Objects (PDO) en bedoeld om verbinding te maken met PostgreSQL-databases. PDO biedt een uniforme abstractielaag voor database-toegang, waardoor je met één API verschillende databases (zoals PostgreSQL, MySQL, SQLite, etc.) kunt benaderen. Dit maakt je code beter overdraagbaar tussen databases.
PHP PostgreSQL-extensies in ServBay
ServBay levert de pgsql
extensie en PDO_PGSQL
driver kant-en-klaar geïnstalleerd voor elke ondersteunde PHP-versie en zorgt ervoor dat ze standaard zijn ingeschakeld.
Hoe PostgreSQL-extensies inschakelen
In ServBay hoef je geen enkele handmatige stap uit te voeren om pgsql
of PDO_PGSQL
te activeren. Ze zijn al voor je geconfigureerd en direct beschikbaar voor gebruik in je PHP-code.
PostgreSQL gebruiken in PHP-code
Als de benodigde extensies zijn geactiveerd, kun je met zowel native pgsql
-functies als PDO-objecten PostgreSQL-databases connecteren en bewerken via PHP.
Voorwaarden:
- Je dient PostgreSQL te draaien via ServBay.
- Je hebt een database aangemaakt genaamd
servbay_db
. - Je hebt een gebruiker genaamd
servbay_user
met wachtwoordyour_password
aangemaakt, met de juiste rechten voorservbay_db
. - In de database
servbay_db
bestaat een tabelusers
met de kolommenid
(SERIAL PRIMARY KEY),name
(VARCHAR),email
(VARCHAR), enage
(INT).
Je kunt deze instellingen uitvoeren met de ingebouwde Adminer van ServBay of een ander databasebeheerprogramma zoals DBeaver of pgAdmin.
Hieronder vind je voorbeeldcode voor beide manieren van verbinden en werken met de database:
Voorbeeldcode (pgsql
extensie)
php
<?php
// --- Voorbeeld met pgsql-extensie ---
// Database verbindingsparameters
$host = "127.0.0.1"; // of 'localhost'
$port = "5432"; // Standaard PostgreSQL-poort
$dbname = "servbay_db";
$user = "servbay_user";
$password = "your_password"; // Vervang dit door je eigen wachtwoord
// Bouw de connectiestring
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// Verbind met PostgreSQL database
$conn = pg_connect($conn_string);
// Controleer of de verbinding gelukt is
if (!$conn) {
die("pgsql Verbinding mislukt: " . pg_last_error());
}
echo "pgsql Verbinding succesvol<br>";
// Gegevens invoegen (let op: pg_query ondersteunt geen parameterbinding; gebruik pg_query_params voor veilige queries)
$name = "ServBay Pgsql";
$email = "pgsql@servbay.demo";
$age = 7;
// Veilige parametergebonden query met 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: Nieuw record succesvol toegevoegd<br>";
} else {
echo "pgsql Fout: " . pg_last_error($conn) . "<br>";
}
// Data opvragen
$query = "SELECT id, name, email, age FROM users WHERE name = $1";
$result = pg_query_params($conn, $query, array('ServBay Pgsql'));
if ($result) {
echo "pgsql Opgevraagde data:<br>";
// Controleer of er rijen zijn gevonden
if (pg_num_rows($result) > 0) {
// Haal alle rijen op als een associatieve array
$data = pg_fetch_all($result, PGSQL_ASSOC);
foreach ($data as $row) {
echo "id: " . $row["id"]. " - Naam: " . $row["name"]. " - E-mail: " . $row["email"]. " - Leeftijd: " . $row["age"]. "<br>";
}
} else {
echo "pgsql: 0 resultaten gevonden<br>";
}
} else {
echo "pgsql Fout bij het opvragen van data: " . pg_last_error($conn) . "<br>";
}
// Sluit de databaseverbinding
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
Voorbeeldcode (PDO_PGSQL
-manier)
php
<?php
// --- Voorbeeld met PDO_PGSQL ---
// Database verbindingsparameters
$host = '127.0.0.1'; // of 'localhost'
$port = 5432; // Standaard PostgreSQL-poort
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Vervang dit door je eigen wachtwoord
// Data Source Name (DSN) voor PostgreSQL
$dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
// PDO verbindingsopties
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Gooi exceptions in plaats van warnings
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Standaard: assoc. arrays ophalen
// PDO::ATTR_EMULATE_PREPARES => false, // Meestal niet nodig voor PostgreSQL
];
try {
// Maak een nieuwe PDO-verbinding
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO_PGSQL Verbinding succesvol<br>";
// Voeg gegevens toe via prepared statement
$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;
// Parameters binden en uitvoeren
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO_PGSQL: Nieuw record succesvol toegevoegd<br>";
// Data opvragen
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// Alle resultaten ophalen
$users = $stmt->fetchAll(); // Standaard FETCH_ASSOC
if ($users) {
echo "PDO_PGSQL Opgevraagde data:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Naam: " . $row['name'] . " - E-mail: " . $row['email'] . " - Leeftijd: " . $row['age'] . "<br>";
}
} else {
echo "PDO_PGSQL: 0 resultaten gevonden<br>";
}
} catch (\PDOException $e) {
// Fout bij verbinden of ophalen
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// PDO-verbindingsobject wordt automatisch gesloten aan het einde van het script
// $pdo = null; // Desgewenst expliciet sluiten
?>
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 plaatsen: Sla een van bovenstaande codevoorbeelden op als een .php
-bestand (bijvoorbeeld pg_test_native.php
of pg_test_pdo.php
) en plaats dit bestand in de hoofdmap van jouw ServBay-website (zoals /Applications/ServBay/www/myproject/
). Open daarna de juiste URL in je browser (zoals http://myproject.servbay.demo/pg_test_native.php
). Controleer of jouw website en de PostgreSQL-service binnen ServBay correct zijn ingesteld en draaien.
Veelgestelde Vragen (FAQ)
Q: Moet ik de PHP PostgreSQL-extensies (pgsql
of PDO_PGSQL
) handmatig installeren in ServBay?
A: Nee, dat is niet nodig. ServBay heeft de pgsql
extensie en PDO_PGSQL
driver al geïnstalleerd en standaard ingeschakeld voor alle door ServBay beheerde PHP-versies. Je kunt ze direct in je code gebruiken, zonder extra installatie of configuratie.
Q: Wat is het verschil tussen de pgsql
extensie en de PDO_PGSQL
driver? Welke moet ik gebruiken?
A:
- De
pgsql
extensie biedt een verzameling PostgreSQL-specifieke functies (zoalspg_connect
,pg_query_params
). Als je de unieke mogelijkheden van PostgreSQL intensief wilt benutten, is dit een directe aanpak. PDO_PGSQL
is onderdeel van de PDO-abstractielaag. Met PDO kun je je databasecode eenvoudig overdraagbaar maken: als je overstapt naar bijvoorbeeld MySQL, hoef je minder aanpassingen te doen. PDO dwingt ook het gebruik van prepared statements af, wat extra veilig is en de moderne PHP-aanpak is.- Aanbevolen: Voor nieuwe projecten of projecten die overdraagbaarheid en veiligheid belangrijk vinden, gebruik bij voorkeur
PDO_PGSQL
. Beheer je een ouder project of heb je specifiekepgsql
-functies nodig, dan is depgsql
extensie geschikt.
Q: Hoe krijg ik de verbindingsgegevens voor PostgreSQL in ServBay (host, poort, gebruikersnaam, wachtwoord, databasenaam)?
A:
- Host: Meestal
127.0.0.1
oflocalhost
. - Poort: De standaard PostgreSQL-poort is
5432
. Controleer de werkelijke poort in het PostgreSQL-pakketbeheer binnen ServBay. - Gebruikersnaam / Wachtwoord / Databasenaam: Deze maak je zelf aan in je PostgreSQL-service. Gebruik bijvoorbeeld de ingebouwde Adminer van ServBay of andere PostgreSQL-tools zoals pgAdmin of DBeaver om gebruikers, databases en rechten aan te maken of te bewerken.
Q: Hoe voorkom ik SQL-injectie bij gebruik van de pgsql
extensie?
A: Voorkom dat je gebruikersinvoer direct aan een SQL-query toevoegt. Gebruik de functie pg_query_params()
waarmee je je SQL-statement en parameters gescheiden aanlevert; de PostgreSQL-driver zorgt dan zelf voor veilige parameterverwerking. Je kunt ook gebruikmaken van pg_escape_string()
of pg_escape_literal()
voor het escapen van data (maar pg_query_params
is de aanbevolen en veiligste methode).
Conclusie
ServBay maakt het eenvoudig om PHP te verbinden met PostgreSQL op een lokale macOS-ontwikkelmachine dankzij de vooraf geïnstalleerde en standaard ingeschakelde pgsql
en PDO_PGSQL
extensies. Ontwikkelaars hoeven zich geen zorgen te maken over het installeren of configureren van deze extensies en kunnen direct kiezen voor de uitbreidbaarheid en veiligheid van PDO of, indien gewenst, de kracht van de native pgsql
functies. Zo kun je je volledig focussen op de applicatielogica en optimaal profiteren van de kracht van PostgreSQL bij het ontwikkelen van schaalbare en betrouwbare webapplicaties.