Logique générale d’un programme : CLI , PHP, MySQL et les autres

CLI et APIs standards

Le standard CLI (Call Level Interface) a été créé dans les années 90 par le SQL Access Group (SAG) pour permettre à tous les SGBDRs d’intéragir de manière normalisé avec des langages de programmation.

CLI est donc une interface standard de programmation : une ‘Application Programming Interface’ ou A.P.I

Pour + d’nfos voir : http://www.tar.hu/sqlbible/sqlbible0117.html

O.D.B.C (Open database Connectivity) de Microsoft est par exemple conforme à ce standard.

Concrètement cela veut dire que si l’on comprend la logique d’un programme PHP/mysqli, ou PHP/PDOMySQL, on pourra facilement écrire un programme en VB pour Oracle car la séquence des opérations et leur butssont quasiment toujours les mêmes…

Logique générale standard

La logique générale d’un programme accédant à une base de données (et exemple de fonctions CLI correspondantes) est la suivante :

1. allocation handler de connexion : AllocHandle()
2. connexion : Connect()
3. allocation handler ordre SQL : AllocHAndle()
4. (préparation éventuelle de l’ordre, si paramètres…) : Prepare()
5. exécution de l’ordre (voir zoom ci après) : Execute() ou ExecDirect()
6. déconnexion : Disconnect()
7. libération des ressources : FreeHAndle()

Zoomons plus précisément sur l’exécution d’un ordre :

cli_sql_flow.jpg

exemple d’application : mise à jour avec PDO

Un ordre de mise à jour simple sans paramètres

<?php

// ouverture de connexion
$dbh = new PDO(‘mysql:host=localhost;dbname=test’, $user, $pass);

// execution
$stmt->execute();

// liberation
$dbh = null;
?>

un ordre de mise à jour avec paramètres

<?php

// ouverture de connexion
$dbh = new PDO(‘mysql:host=localhost;dbname=test’, $user, $pass);

// preparation de l’ordre
$stmt =$dbh->prepare(« INSERT … »);

// association des parametres
$stmt->bindParam(…);
$stmt->bindParam(…);

// execution
$stmt->execute();

// liberation
$dbh = null;
?>

Un ordre SELECT est un peu plus compliqué car il faudra après l’exécution récupérer les lignes par une série de ‘fetch’ et bein sûr…les afficher en les formattant correctement.