Introduction à PHP 5 par l'exemple


précédentsommairesuivant

VIII. Utilisation du Sgbd MySql

Nous allons écrire des scripts PHP utilisant une base de données MySQL :

Image non disponible

Le Sgbd MySQL est inclus dans le paquetage WampServer (cf page ). Nous montrons comment créer une base de données ainsi qu'un utilisateur MySQL.

Image non disponible
  • une fois lancé, WampServer peut être administré à partir d'une icône [1] placée en bas à droite de la barre des tâches.
  • en [2], on lance l'outil d'administration de MySQL

On crée une base de données [dbpersonnes] :

Image non disponible

On crée un utilisateur [admpersonnes] avec le mot de passe [nobody] :

Image non disponible
Image non disponible
  • en [1], le nom de l'utilisateur
  • en [2], la machine du SGBD sur lequel on lui donne des droits
  • en [3], son mot de passe
  • en [4], idem
  • en [5], on ne donne aucun droit à cet utilisateur
  • en [6], on le créeImage non disponible
  • en [7], on revient sur la page d'accueil de phpMyAdmin
  • en [8], on utilise le lien [Privileges] de cette page pour aller modifier ceux de l'utilisateur [admpersonnes] [9].Image non disponible
  • en [10], on indique qu'on veut donner à l'utilisateur [admpersonnes] des droits sur la base de données [dbpersonnes]
  • en [11], on valide le choixImage non disponible
  • avec le lien [12] [Tout cocher], on accorde à l'utilisateur [admpersonnes] tous les droits sur la base de données [dbpersonnes] [13]
  • on valide en [14]

Désormais nous avons :

  • une base de données MySQL [dbpersonnes]
  • un utilisateur [admpersonnes / nobody] qui a tous les droits sur cette base de données

Nous allons écrire des scripts PHP pour exploiter la base de données. PHP dispose de diverses bibliothèques pour gérer les bases de données. Nous utiliserons la bibliothèque PDO (PHP Data Objects) qui s'interface entre le code PHP et le SGBD :

Image non disponible

La bibliothèque PDO permet au script PHP de s'abstraire de la nature exacte du Sgbd utilisé. Ainsi ci-dessus, le Sgbd MySQL peut être remplacé par le Sgbd Postgres avec un impact minimum sur le code du script PHP. Cette bibliothèque n'est pas disponible par défaut. On peut vérifier sa disponibilité de la façon suivante :

Image non disponible
  • 1 : à partir de l'icône d'administration de WampServer, on sélectionne l'option [PHP / PHP extensions]
  • 2 : on voit les différentes extensions PDO disponibles et celles qui sont actives : [php_pdo_mysql] pour le Sgbd MySQL, [php_pdo_sqlite] pour le Sgbd SQL Lite. Pour activer une extension, il suffit de cliquer dessus. L'interpréteur PHP est alors relancé avec la nouvelle extension activée.

VIII-A. Connexion à une base MySQL - 1 (mysql_01)

La connexion à un Sgbd se fait par la construction d'un objet PDO. Le constructeur admet différents paramètres :

 
CacherSélectionnez

La signification des paramètres est la suivante :

$dsn (Data Source Name) est une chaîne précisant la nature du Sgbd et sa localisation sur internet. La chaîne "mysql:host=localhost" indique qu'on a affaire à un Sgbd MySQL opérant sur le serveur local. Cette chaîne peut comprendre d'autres paramètres, notamment le port d'écoute du Sgbd et le nom de la base à laquelle on veut se connecter : "mysql:host=localhost:port=3306:dbname=dbpersonnes".

$useridentifiant de l'utilisateur qui se connecte

$passwdson mot de passe

$driver_optionsun tableau d'options pour le pilote du Sgbd

Seul le premier paramètre est obligatoire. L'objet ainsi construit sera ensuite le support de toutes les opérations faites sur la base de données à laquelle on s'est connecté. Si l'objet PDO n'a pu être construit, une exception de type PDOException est lancée.

Voici un exemple de connexion :

 
CacherSélectionnez

Résultats :

 
CacherSélectionnez

Commentaires

  • ligne 11 : la connexion à un Sgbd se fait par la construction d'un objet PDO. Le constructeur est ici utilisé avec les paramètres suivants :
  • une chaîne précisant la nature du Sgbd et sa localisation sur internet. La chaîne "mysql:host=localhost" indique qu'on a affaire à un Sgbd MySQL opérant sur le serveur local. Le port n'a pas été précisé. Le port 3306 est alors utilisé par défaut. Le nom de la base de données n'est pas indiqué non plus. Il y aura alors connexion au SGBD MySQL, la sélection d'une base précise se faisant plus tard.
  • un identifiant d'utilisateur
  • son mot de passe
  • ligne 14 : la fermeture de la connexion se fait par destruction de l'objet PDO créé initialement.
  • ligne 15 : la connexion à un Sgbd peut échouer. Dans ce cas, une exception de type PDOException est lancée.

VIII-B. Création d'une table MySQL (mysql_02)

 
CacherSélectionnez

Résultats :

 
CacherSélectionnez

Dans PHPMyAdmin, on peut voir la présence de la table :

Image non disponible

Commentaires

  • lignes 38-50 : la fonction connecte crée une connexion à un Sgbd. Elle rend un tableau ($erreur, $connexion) où $connexion est la connexion créée ou null s'il n'a pu être créée. Dans ce dernier cas, $erreur est un message d'erreur.
  • lignes 53-56 : la fonction déconnecte ferme une connexion
  • ligne 59 : la fonction exécuteRequête permet d'exécuter un ordre SQL sur une connexion. La connexion est un objet PDO. La méthode utilisée pour exécuter un ordre SQL sur un objet PDO est la méthode exec (ligne 63). L'exécution de la requête peut lancer une PDOException. Aussi celle-ci est-elle gérée. La fonction rend un message d'erreur en cas d'erreur, une chaîne vide sinon.

VIII-C. Remplissage de la table personnes (mysql_03)

Le script suivant exécute des ordres SQL trouvés dans le fichier texte [creation.txt] suivant :

 
CacherSélectionnez
 
CacherSélectionnez

Les résultats écran :

 
CacherSélectionnez

Les insertions faites sont visibles avec PhpMyAdmin :

Image non disponible

Commentaires

La nouveauté réside dans la fonction exécuterCommandes des lignes 48-90. Cette fonction exécute sur la connexion $connexion les ordres SQL trouvés dans le fichier texte de nom $SQL. Elle rend un tableau d'erreurs ($nbErreurs, $msg1, $msg2…) où $nbErreurs est le nombre d'erreurs, $msgi le message d'erreur n° i. S'il n'y a pas d'erreurs, le tableau rendu est le tableau array(0).

VIII-D. Exécution de requêtes SQL quelconques (mysql_04)

Le script suivant montre l'exécution des ordres SQL du fichier texte [sql.txt] suivant :

 
CacherSélectionnez

Parmi ces ordres SQL, il y a l'ordre select qui ramène des résultats de la base de données, les ordres insert, update, delete qui modifient la base sans ramener de résultats et enfin des ordres erronés tels que le dernier (xselect).

 
CacherSélectionnez

Les résultats écran :

 
CacherSélectionnez

Commentaires

Chacune des commandes du fichier texte [sql.txt] est exécutée par la fonction exécuteRequête de la ligne 43.

  • ligne 43 : les deux paramètres de la fonction sont la connexion ($connexion) sur laquelle doivent être exécutés les ordres SQL et l'ordre sql ($sql) à exécuter. La fonction rend un tableau de deux valeurs ($erreur,$résultat) où
  • $erreur est un message d'erreur éventuellement vide s'il n'y a pas eu d'erreur
  • $résultat : le résultat rendu par l'exécution de l'ordre SQL. Ce résultat est différent selon que l'ordre est un ordre select ou bien un ordre insert, update, delete.
  • lignes 48-51 : on récupère le 1er élément de l'ordre SQL pour savoir si on affaire à un ordre select ou bien à un ordre insert, update, delete.
  • ligne 55 : dans le cas d'un ordre select, celui-ci est exécuté avec la méthode [PDO]->query("ordre select"). Le résultat rendu est un objet de type PDOStatement.
  • ligne 57 : dans le cas d'un ordre insert, update, delete, celui-ci est exécuté avec la méthode [PDO]->exec("ordre SQL"). Le résultat rendu est le nombre de lignes modifiées par l'ordre SQL. Ainsi si un ordre SQL delete supprime deux lignes, le résultat rendu est l'entier 2. S'il y a une erreur à l'exécution, le résultat rendu est le booléen false. Dans ce cas, la méthode [PDO]->errorinfo() donne des informations sur l'erreur sous la forme d'un tableau de valeurs. L'élément d'indice 2 de ce tableau est le message d'erreur.
  • lignes 58-60 : traitement de l'éventuelle erreur de l'opération [PDO]->exec("ordre SQL").
  • lignes 65-68 : traitement de l'éventuelle exception
  • ligne 72 : la fonction exécuterCommandes exécute sur la connexion $connexion les commandes SQL stockées dans le fichier texte $SQL. C'est un code que nous avons déjà rencontré à un détail près : la ligne 111.
  • ligne 111 : la fonction exécuteRequête a rendu un tableau ($erreur,$résultat) ou $résultat est le résultat de l'exécution d'une commande SQL. Ce résultat est différent selon que l'ordre SQL était un ordre select ou bien un ordre insert, update, delete. La fonction afficherInfos affiche des informations sur ce résultat.
  • ligne 122 : si l'ordre SQL était un ordre select, le résultat est de type PDOStatement. Ce type représente une table faite de lignes et de colonnes.
  • ligne 125 : la méthode [PDOStatement]->getColumnCount() rend le nombre de colonnes de la table résultat du select
  • ligne 127 : la méthode [PDOStatement]->getMeta(i) rend un dictionnaire d'informations sur la colonne n° i de la table résultat du select. Dans ce dictionnaire, la valeur associée à la clé 'name' est le nom de la colonne.
  • lignes 127-129 : les noms des colonnes de la table résultat du select sont concaténées dans une chaîne de caractères.
  • lignes 141-145 : un objet de type PDOStatement peut être parcouru par une boucle foreach. A chaque itération, l'élément obtenu est une ligne de la table résultat du select sous la forme d'un tableau de valeurs représentant les valeurs des différentes colonnes de la ligne. On affiche toutes ces valeurs avec une boucle for.
  • ligne 154 : le résultat de l'exécution d'un ordre insert, update, delete est le nombre de lignes modifiées par l'ordre.

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Serge Tahé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.