Interface d’administration

Tout utilisateur de MySQL a déjà utilisé le très connu PhpMyAdmin. L’équivalent pour PostgreSQL s’appelle tout simplement PhpPgAdmin et est disponible à cette adresse pour ceux qui l’utilisent chez Free.

Il faut déplier tout l’arborescence dans le menu latéral gauche (et passer une identification) pour arriver à une vue similaire à PhpMyAdmin.

L’interface permet de créer des tables. Pour faire un identifiant « auto-increment« , il faut laisser le type « serial » proposé par défaut. Le type « varchar » de MySQL semble équivalent au type « character ».

J’ai noté aussi quelque chose de surprenant : un champ dans la base de données de type Booléen va renvoyer une chaine « t » ou une chaine « f » pour respectivement « true » ou « false« . Je m’attendais à true / false directement ou à la rigueur 0 / 1, mais bon…

Connexion à la base de données

Une première chose à faire pour savoir comment manipuler une base de données PostgreSQL en PHP est d’aller sur la documentation. À l’instar de la fonction mysql_connect(), il existe une fonction pg_connect() mais avec une subtilité. En effet, il faut se servir d‘un seul argument pour préciser l’hôte, l’utilisateur et le mot de passe.

pg_connect("host=sql.free.fr dbname=toto user=toto password=firefox");

Ainsi, la ligne ci-dessus permet de se connecter au serveur PostgreSQL de Free avec l’identifiant « toto » et le mot de passe « firefox ».

Envoyer une requête

Cela peut paraître quelque chose de très anodin, mais envoyer une requête SQL n’est pas si simple. En effet, que choisir entre ces fonctions :

Il n’y a pas de réponses miracles : cela dépend de ce que vous voulez faire. Le mieux est encore de lire la documentation et surtout les exemples associés à chacune d’elles. Pour ma part, je trouve que pg_query() fait une bonne alternative à mysql_query() (avec ses défauts)

Elle offre l’avantage de s’écrire de la même façon, y compris le code SQL (heureusement qu’il est commun aux deux SGBD). Veillez toutefois à protéger correctement vos requêtes des injections SQL, en utilisant pg_escape_strings() par exemple, qui est l’équivalent de mysql_real_escape_string().

Notez que pg_query() peut retourner false. Dans ce cas, on peut se servir de pg_last_error() pour récupérer un message d’erreur. Malheureusement, je n’ai pas trouvé comment récupérer uniquement un code d’erreur, à la manière de mysql_errno(). Si un utilisateur plus confirmé peut donner la solution en commentaire, ça serait parfait.

Petite subtilité pour les champs auto-increment : alors qu’avec MySQL il suffit de laisser ce champ vide lors d’une requête SQL de type INSERT, il faut la spécifier avec PostgreSQL. Le mot-clé pratique est alors nextval, et s’utilise avec le champ que l’on veut incrémenter. On trouvera son nom dans l’interface web PhpPgAdmin.

Exemple d’insertion avec MySQL :

INSERT INTO news VALUES('', 'Ma super news', 'Guilou chante du zouk');

La même requête en PostgreSQL :

INSERT INTO news VALUES(nextval('news_id_seq'::regclass), 'Ma super news', 'Guilou chante du zouk');

Récupérer les résultats

En utilisant pg_query(), vous pouvez utiliser pg_fetch_array() à la manière de mysql_fetch_array(). D’autres fonctions pratiques vous seront peut-être utiles, telles que pg_num_rows() ou pg_affected_rows().

Conclusion

Arrivé à ce stade, on se rend bien compte que passer de MySQL à PostgreSQL n’est pas difficile. Il suffit presque de remplacer « mysql_ » par « pg_ » dans chaque appels de fonctions. La documentation PHP à le mérite d’être bien rédigée, et de permettre de comprendre rapidement comment arriver à ses fins.

Dans le cas où vous êtes en difficulté, vous trouverez surement un peu d’aide sur le chan IRC #postgresqlfr sur Freenode. (Hop, lien direct)