Pourquoi PHP et PostgreSQL sont un coup de foudre dès la première requête ?
\n\nLe monde du développement web est plein de stéréotypes. L'un d'eux dit : « PHP ne s'entend bien qu'avec MySQL ». Il y a une part de vérité là-dedans, mais seulement jusqu'à ce que vous essayiez la combinaison PHP et PostgreSQL. C'est comme passer du vélo à une moto sportive : les mêmes roues, mais la vitesse, la maniabilité et la fiabilité sont complètement différentes.
\n\nPostgreSQL n'est pas qu'une simple base de données. C'est un monstre objecto-relationnel qui sait gérer le JSON, les données géographiques, la recherche en texte intégral et les transactions les plus complexes. Et PHP est le chef d'orchestre idéal pour cet ensemble. Dans ce guide, nous allons tout détailler : de l'installation du pilote à l'écriture de code prêt pour la production. C'est parti !
\n\n1. Installation et configuration : préparons les outils
\n\nAvant d'écrire du code, assurons-nous que PHP connaît l'existence de PostgreSQL. Dans la plupart des distributions PHP modernes (par exemple, XAMPP, OpenServer, Docker), l'extension pdo_pgsql est déjà présente, mais elle doit être activée.
1.1. Activer l'extension dans php.ini
\n\nOuvrez votre fichier php.ini et décommentez (supprimez le point-virgule au début) la ligne :
extension=pdo_pgsql\n\nSi vous utilisez Linux, l'installation se fait ainsi :
\n\nsudo apt-get install php-pgsql\nsudo service apache2 restart # ou nginx + php-fpm\n\n1.2. Créer une base de données et un utilisateur
\n\nConnectez-vous à la console PostgreSQL :
\n\nsudo -u postgres psql\n\nCréons maintenant une base de données et un utilisateur pour notre projet :
\n\nCREATE DATABASE pythonlib_blog;\nCREATE USER myapp WITH PASSWORD 'SuperSecret123';\nGRANT ALL PRIVILEGES ON DATABASE pythonlib_blog TO myapp;\n\\q\n\nVoilà. Nous avons maintenant une base pythonlib_blog et un utilisateur myapp.
2. Première connexion : PDO comme standard
\n\nN'utilisez jamais les anciennes fonctions pg_connect(). Dans le PHP moderne, il y a PDO (PHP Data Objects) — une interface unifiée pour travailler avec différentes bases de données. C'est plus sûr, plus pratique et cela prend en charge les requêtes préparées.
2.1. Classe d'encapsulation pour la connexion
\n\nCréons une classe simple Database qui gérera la connexion :
<?php\n\nclass Database {\n private static ?PDO $instance = null;\n private const DB_HOST = 'localhost';\n private const DB_PORT = 5432;\n private const DB_NAME = 'pythonlib_blog';\n private const DB_USER = 'myapp';\n private const DB_PASS = 'SuperSecret123';\n\n public static function getConnection(): PDO {\n if (self::$instance === null) {\n $dsn = "pgsql:host=" . self::DB_HOST . ";port=" . self::DB_PORT . ";dbname=" . self::DB_NAME;\n try {\n self::$instance = new PDO($dsn, self::DB_USER, self::DB_PASS, [\n PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,\n PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n PDO::ATTR_EMULATE_PREPARES => false,\n ]);\n } catch (PDOException $e) {\n die("Connection failed: " . $e->getMessage());\n }\n }\n return self::$instance;\n }\n}\n\nPourquoi est-ce génial ? Premièrement, le singleton — nous ne créons pas une nouvelle connexion à chaque requête. Deuxièmement, ATTR_EMULATE_PREPARES => false force PostgreSQL à utiliser de vraies requêtes préparées, et non une émulation côté PHP. Cela améliore les performances et la sécurité.
3. Opérations CRUD : créer, lire, mettre à jour, supprimer
\n\nPassons maintenant au cœur du sujet. Supposons que nous ayons une table articles pour les articles sur pythonlib.ru.
3.1. Création de la table
\n\nExécutez ce SQL dans votre base de données (via psql ou l'interface d'administration) :
\n\nCREATE TABLE articles (\n id SERIAL PRIMARY KEY,\n title VARCHAR(255)