Utilisation des extensions PHP PostgreSQL (pgsql, PDO_PGSQL) avec ServBay
ServBay est un environnement de développement Web local intégré et puissant. Il intègre nativement le support de PostgreSQL, et fournit toutes les extensions PHP nécessaires pour permettre aux développeurs de se connecter facilement et de manipuler une base de données PostgreSQL dans leurs applications PHP. Pour chaque version de PHP supportée, ServBay pré-installe et active par défaut les extensions pgsql
et PDO_PGSQL
.
Présentation des extensions PHP PostgreSQL
PostgreSQL est un système de gestion de bases de données relationnel-objet open source reconnu pour sa stabilité, son intégrité des données et ses riches fonctionnalités. Pour interagir avec PostgreSQL depuis PHP, il faut utiliser les extensions PHP appropriées. ServBay fournit principalement deux extensions :
- Extension
pgsql
: Il s’agit de l’extension native PostgreSQL pour PHP, fournissant une série de fonctions commençant parpg_
(commepg_connect
,pg_query
,pg_fetch_assoc
, etc.) pour interagir directement avec PostgreSQL. Elle permet d’exploiter les fonctionnalités spécifiques à PostgreSQL. - Pilote
PDO_PGSQL
: Partie de l’extension PHP Data Objects (PDO) dédiée à la connexion PostgreSQL. PDO fournit une couche d’abstraction unifiée pour l’accès aux bases de données, autorisant l’utilisation d’une même API pour différents systèmes (PostgreSQL, MySQL, SQLite, etc). Cela facilite l’écriture de code portable.
Extensions PHP PostgreSQL dans ServBay
ServBay veille à ce que l’extension pgsql
et le pilote PDO_PGSQL
soient préinstallés et activés par défaut pour chaque version PHP prise en charge.
Comment activer les extensions PostgreSQL
Avec ServBay, il n’est pas nécessaire d’effectuer la moindre action manuelle pour activer les extensions pgsql
ou PDO_PGSQL
. Elles sont déjà configurées et prêtes à l’emploi dans vos scripts PHP.
Utilisation de PostgreSQL dans du code PHP
Une fois les extensions activées, vous pouvez utiliser les fonctions pgsql
ou les objets PDO directement dans votre code PHP pour vous connecter et interagir avec la base de données.
Pré-requis :
- Le service PostgreSQL doit être en cours d’exécution dans ServBay.
- Un schéma de base de données nommé
servbay_db
est supposé exister. - Un utilisateur nommé
servbay_user
avec le mot de passeyour_password
, ayant les droits nécessaires surservbay_db
, doit être créé. - On suppose l’existence d’une table
users
dansservbay_db
comportant les colonnes suivantes :id
(SERIAL PRIMARY KEY),name
(VARCHAR),email
(VARCHAR),age
(INT).
Vous pouvez effectuer ces opérations via adminer intégré à ServBay ou à l’aide d’outils comme DBeaver ou pgAdmin.
Voici des exemples d’utilisation des deux méthodes pour se connecter à la base de données et effectuer des opérations de base :
Exemple de code (extension pgsql
)
<?php
// --- Exemple extension pgsql ---
// Paramètres de connexion à la base de données
$host = "127.0.0.1"; // ou 'localhost'
$port = "5432"; // Port par défaut de PostgreSQL
$dbname = "servbay_db";
$user = "servbay_user";
$password = "your_password"; // Remplacez par votre mot de passe réel
// Construction de la chaîne de connexion
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// Connexion à la base PostgreSQL
$conn = pg_connect($conn_string);
// Vérification de la connexion
if (!$conn) {
die("pgsql Connexion échouée : " . pg_last_error());
}
echo "pgsql Connexion réussie<br>";
// Insertion de données (remarque : pg_query ne gère pas nativement la liaison de paramètres, utilisez le bon échappement pour éviter l’injection SQL, ou utilisez pg_query_params)
$name = "ServBay Pgsql";
$email = "[email protected]";
$age = 7;
// Utilisation de pg_query_params pour une requête paramétrée sécurisée
$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 : Nouvel enregistrement créé avec succès<br>";
} else {
echo "Erreur pgsql : " . pg_last_error($conn) . "<br>";
}
// Requête de sélection de données
$query = "SELECT id, name, email, age FROM users WHERE name = $1";
$result = pg_query_params($conn, $query, array('ServBay Pgsql'));
if ($result) {
echo "pgsql Données récupérées :<br>";
// Vérification s'il y a des lignes retournées
if (pg_num_rows($result) > 0) {
// Récupérer toutes les lignes comme un tableau associatif
$data = pg_fetch_all($result, PGSQL_ASSOC);
foreach ($data as $row) {
echo "id : " . $row["id"]. " - Nom : " . $row["name"]. " - Email : " . $row["email"]. " - Âge : " . $row["age"]. "<br>";
}
} else {
echo "pgsql : aucun résultat trouvé<br>";
}
} else {
echo "Erreur lors de la requête pgsql : " . pg_last_error($conn) . "<br>";
}
// Fermeture de la connexion à la base
pg_close($conn);
?>
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
Exemple de code (avec PDO_PGSQL
)
<?php
// --- Exemple PDO_PGSQL ---
// Paramètres de connexion à la base de données
$host = '127.0.0.1'; // ou 'localhost'
$port = 5432; // Port par défaut de PostgreSQL
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Remplacez par votre mot de passe réel
// Data Source Name (DSN) PostgreSQL
$dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
// Options de connexion PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Lancer des exceptions à la place des alertes
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Récupérer par défaut un tableau associatif
// PDO::ATTR_EMULATE_PREPARES => false, // Généralement inutile pour PostgreSQL
];
try {
// Création de l’instance de connexion PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO_PGSQL Connexion réussie<br>";
// Insertion de données (requête préparée)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Pgsql';
$email = '[email protected]';
$age = 12;
// Lier les paramètres et exécuter
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO_PGSQL : Nouvel enregistrement créé avec succès<br>";
// Sélection de données
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// Récupérer tous les résultats
$users = $stmt->fetchAll(); // FETCH_ASSOC par défaut
if ($users) {
echo "PDO_PGSQL Données récupérées :<br>";
foreach ($users as $row) {
echo "id : " . $row['id'] . " - Nom : " . $row['name'] . " - Email : " . $row['email'] . " - Âge : " . $row['age'] . "<br>";
}
} else {
echo "PDO_PGSQL : aucun résultat trouvé<br>";
}
} catch (\PDOException $e) {
// Capturer et afficher les erreurs de connexion ou de requête
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// La connexion PDO se ferme en général automatiquement à la fin du script, inutile d’appeler close() explicitement
// $pdo = null; // On peut forcer la fermeture en réaffectant null
?>
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
Placement du code :
Enregistrez n’importe quel exemple de code ci-dessus dans un fichier .php
(par exemple pg_test_native.php
ou pg_test_pdo.php
) et placez-le à la racine de votre site ServBay (par exemple /Applications/ServBay/www/myproject/
). Accédez ensuite à ce fichier via l’URL correspondante (par exemple http://myproject.servbay.demo/pg_test_native.php
). Assurez-vous que votre site web et le service PostgreSQL sont démarrés et correctement configurés dans ServBay.
Foire aux questions (FAQ)
Q : Dois-je installer manuellement les extensions PHP PostgreSQL (pgsql
ou PDO_PGSQL
) dans ServBay ?
R : Non, ce n’est pas nécessaire. ServBay pré-installe et active par défaut les extensions pgsql
et le pilote PDO_PGSQL
pour toutes les versions de PHP qu’il gère. Vous pouvez les utiliser directement dans votre code sans aucune configuration ou installation supplémentaire.
Q : Différences entre l’extension pgsql
et le pilote PDO_PGSQL
. Lequel dois-je utiliser ?
R :
- L’extension
pgsql
fournit un ensemble de fonctions spécifiques à PostgreSQL (ex :pg_connect
,pg_query_params
). Si vous avez besoin d’accéder à des fonctionnalités propres à PostgreSQL, cette extension peut être plus adaptée. PDO_PGSQL
fait partie de la couche d’abstraction PDO. Utiliser PDO rend votre code base de données plus portable : en cas de changement futur de système de base de données (MySQL, etc.), une modification mineure suffit. PDO impose également l’usage de requêtes préparées, ce qui est recommandé pour la sécurité.- Recommandé : Pour les nouveaux projets, ou si vous souhaitez un code plus portable et sécurisé, privilégiez
PDO_PGSQL
. Si vous maintenez un ancien projet ou avez besoin de fonctions spécifiques àpgsql
, ce dernier restera pertinent.
Q : Où trouver les informations de connexion à PostgreSQL dans ServBay (hôte, port, login, mot de passe, nom de base) ?
R :
- Hôte (Host) : En général, utilisez
127.0.0.1
oulocalhost
. - Port : Le port standard PostgreSQL est
5432
. Vous pouvez le vérifier dans l’interface de gestion PostgreSQL de ServBay. - Nom d’utilisateur / Mot de passe / Nom de la base : Ce sont ceux que vous avez créés dans votre service PostgreSQL. Utilisez adminer intégré à ServBay ou d’autres outils clients comme pgAdmin ou DBeaver pour gérer ces paramètres.
Q : Comment éviter l’injection SQL avec l’extension pgsql
?
R : Ne concaténez jamais directement les entrées utilisateur dans vos requêtes SQL. Utilisez toujours la fonction pg_query_params()
permettant de séparer les instructions SQL et les données, ce qui assure échappement et sécurité. Sinon, en cas d’utilisation de pg_query()
, veillez à échapper les entrées utilisateurs avec pg_escape_string()
ou pg_escape_literal()
. Mais dans la plupart des situations, privilégiez pg_query_params
.
Conclusion
En préinstallant et activant par défaut les extensions PHP pgsql
et PDO_PGSQL
, ServBay simplifie considérablement la connexion à une base PostgreSQL locale sous macOS avec PHP. Les développeurs n’ont pas à se soucier de l’installation ou la configuration des modules : il suffit de choisir l’extension adaptée à leur projet (PDO étant conseillé pour la portabilité et la sécurité) pour accéder au service PostgreSQL géré par ServBay. Vous pouvez alors vous concentrer sur la logique de votre application, tout en bénéficiant de la puissance et de la fiabilité de PostgreSQL pour construire des applications web robustes.