Identification

Identifiant
Mot de passe
Mot de passe oublié ?

Partage de documents

Cours



Sondage

Quelle est votre profession ?
Etudiant / Elève
Enseignant / Pédagogue
Webmestre / Développeur
Journaliste / Blogueur
Autre
 
Comment trouvez-vous le système Manhali ?
Très utile
Utile
Peu utile
Inutile

  
 

Chapitre précédent
Chapitre suivant
PHP et MySQL
Informations sur le chapitre :
Cours : Langage PHP
 
elhaddioui_ismail
  • Auteur : elhaddioui_ismail
  • Créé le : 18/05/2014 - 12:42
  • E-mail : ismail.elhaddioui
  • Modifié le : 18/05/2014 - 13:07
  • Lu : 2052 fois
  • Réponses correctes d'auto-évaluation : 63.21 %
  • Licence : BY(Paternité) - NC(Pas d'Utilisation Commerciale) - ND(Pas de Modification)
  • Note : 1/62/63/64/65/66/6 (2 Votes : 6/6)
  •  
    • Introduction

    • Il existe plusieurs systèmes de gestion de base de données relationnelle (SGBDR) que l'on peut utiliser avec PHP, chacun ayant ses avantages et ses inconvénients. Les SGBDR les plus connus sont : MySQL, Oracle, PostgreSQL, SQLite et Microsoft SQL Server.

      Ces SGBDR fournissent presque les mêmes fonctionnalités, la différence se fera sur les performances et la configuration. Parmi les paramètres à considérer dans le choix d’une base de données, c'est le support de l’éditeur et de la communauté, la performance, la possibilité d’optimisation et bien sûr le rapport coût/robustesse. Il est recommandé alors de se familiariser avec un SGBDR libre et gratuit que l'on peut utiliser dans tous nos projets, et ça permet aussi de profiter d'une large communauté et une documentation complète sur le web. Les meilleurs SGBDR libres et gratuits sont : MySQL, PostgreSQL et SQLite.

      Le SGBDR le plus utilisé avec PHP est MySQL (d'après un sondage publié sur le forum des développeurs : developpez.net).

    • Connexion à une base de données MySQL

    • Pour se connecter à une base de données MySQL, on a besoin d'une interface de programmation (API : Application Programming Interface), c'est-à-dire un ensemble des fonctions qui permettent l'interaction entre PHP et MySQL. Le PHP offre 3 types d'API :

      - L'extension "mysql_" : La méthode la plus ancienne pour se connecter à une base de données MySQL (depuis le PHP2). Cette extension n'est pas recommandée pour les nouveaux projets PHP.

      - L'extension "mysqli_" : Une extension plus améliorée que "mysql_", introduite en PHP5.

      - L'extension PDO : Cette nouvelle extension permet de se connecter à toutes les bases de données de la même manière (MySQL, Oracle, PostgreSQL…).

      Voici un tableau comparatif des fonctionnalités de ces trois APIs :

      Fonctionnalité

      Mysqli_

      PDO

      Mysql_

      Introduite en PHP version

      5.0

      5.1

      2.0

      Inclus avec PHP 5.x

      Oui

      Oui

      Oui

      Statut du développement

      Active

      Active

      Uniquement de la maintenance

      Cycle de vie

      Active

      Active

      Passage en obsolète annoncé

      Recommandé pour de nouveaux projets

      Oui

      Oui

      Non

      Interface orientée objet

      Oui

      Oui

      Non

      Interface procédurale

      Oui

      Non

      Oui

      L'API supporte les requêtes non-bloquantes, asynchrones avec mysqlnd

      Oui

      Non

      Non

      Connexions persistantes disponibles

      Oui

      Oui

      Oui

      L'API supporte les jeux de caractères

      Oui

      Oui

      Oui

      L'API supporte les requêtes préparées côté serveur

      Oui

      Oui

      Non

      L'API supporte les requêtes préparées côté client

      Non

      Oui

      Non

      L'API supporte les procédures stockées

      Oui

      Oui

      Non

      L'API supporte les requêtes multiples

      Oui

      La plupart

      Non

      L'API supporte les transactions

      Oui

      Oui

      Non

      Les transactions peuvent être contrôlées avec SQL

      Oui

      Oui

      Oui

      Supporte toutes les fonctionnalités de MySQL 5.1+

      Oui

      La plupart

      Non

       Ces trois extensions sont activées par défaut dans Wamp. Vous pouvez activer ou désactiver certaine extension du PHP à partir du menu de Wamp : PHP >> PHP extensions : php_mysql, php_mysqli et php_pdo_mysql

      Nous avons besoin de 4 paramètres pour se connecter à la base de données quelque soit l'extension utilisée :

      - L'adresse du serveur MySQL : s'il est installé dans la même machine, on met : "localhost" ;

      - Le nom de la base de données ;

      - Le nom d'utilisateur ;

      - Le mot de passe.

      Pour Wamp, les valeurs par défaut sont :

      - Serveur : localhost

      - Utilisateur : root

      - Mot de passe : vide, on écrit juste des guillemets ""

      On va tester les 3 extensions sur une base de données qu'on va créer pour gérer des livres : "bd_livres"

      Connexion à la base de données par l'extension mysql_ :

      <?php
      $connect = mysql_connect ("localhost","root","") or die ("Erreur de connexion au serveur");
      $mysql = mysql_select_db ("bd_livres",$connect) or die ("Erreur de connexion à la base de données");
      ?>

       Connexion à la base de données par l'extension mysqli_ :

      <?php
      $mysqli = new mysqli("localhost", "root", "", "bd_livres");
      ?>

       Connexion à la base de données par l'extension PDO :

      <?php
      $pdo = new PDO('mysql:host=localhost;dbname=bd_livres', 'root', '');
      ?>

       Pour toute application PHP, on écrit ce code de connexion dans un fichier souvent appelé "dbconfig.php", puis on l'appelle au début de chaque page qui utilise la base de données : include("dbconfig.php");

      Voici comment on peut exécuter une requête SQL :

      - Par mysql_ : mysql_query("requête SQL;");

      - Par mysqli_ : $mysqli->query("requête SQL;");

      - Par PDO : Pour les requêtes qui ne retournent pas des résultats comme UPDATE, INSERT, DELETE :

      $pdo->exec("Requête SQL;");

      Pour les requêtes qui retournent un résultat : SELECT : $pdo->query("Requête SQL;");

    • Création de la base de données et des tables

    • La méthode la plus simple pour créer la base de données et les tables, c'est d'utiliser phpMyAdmin. C'est une application web de gestion des bases de données MySQL créée en PHP. phpMyAdmin est une application libre incluse par défaut dans l'environnement Wamp. Vous pouvez ouvrir phpMyAdmin depuis l'icône de Wamp dans la barre des tâches ou directement à partir d'un navigateur : http://localhost/phpmyadmin/

      Personnellement, je préfère créer la base de données et les tables directement par des requêtes SQL et du code PHP en créant un fichier d'installation "install.php" qui permet d'installer mes applications PHP rapidement sur plusieurs machines.

      • Création de la base de données :

      La création de la base de données via PHP est très simple, il suffit d'exécuter la requête "CREATE DATABASE" :

      - Par mysql_ : mysql_query("CREATE DATABASE bd_livres;");

      - Par mysqli_ : $mysqli->query("CREATE DATABASE bd_livres;");

      - Par PDO : $pdo->exec("CREATE DATABASE bd_livres;");

      • Création des tables :

      Pour réaliser une application de gestion simple des livres, on a besoin de deux tables pour le moment, la table "livres" et la table "auteurs" :

      Table : livres

      Nom du champ

      Type

      Taille

      Attributs

      id_livre

      INT

      ---

      UNSIGNED

      AUTO_INCREMENT

      id_auteur

      INT

      ---

      UNSIGNED

      titre_livre

      VARCHAR

      50 caractères

      ---

      nbr_pages

      SMALLINT

      ---

      UNSIGNED

      annee_publication

      SMALLINT

      ---

      UNSIGNED

       

      Table : auteurs

      Nom du champ

      Type

      Taille

      Attributs

      id_auteur

      INT

      ---

      UNSIGNED

      AUTO_INCREMENT

      nom_auteur

      VARCHAR

      20 caractères

      ---

      prenom_auteur

      VARCHAR

      20 caractères

      ---

      Pourquoi on n'a pas précisé la taille des champs numériques ?

      En MySQL, la taille des champs numériques est calculée en octets, il existe 12 types numériques dont 5 types entiers. Si le champ ne contiendra pas des valeurs négatives comme les ids, le nombre des pages et l'année de publication), on ajoute l'attribut "Unsigned" pour gagner plus de taille. Voici l'intervalle des valeurs pour les 5 types entiers en MySQL :

      Type

      Nombre d'octets

      Valeurs pour : Signed

      Valeur pour : Unsigned

      TINYINT

      1

      -128 <---> 127

      0 <---> 255

      SMALLINT

      2

      -32768 <---> 32767

      0 <---> 65535

      MEDIUMINT

      3

      -8388608 <---> 8388607

      0 <---> 16777215

      INT

      4

      -2147483648 <---> 2147483647

      0 <---> 4294967295

      BIGINT

      8

      -9223372036854775808 <---> 9223372036854775807

      0 <---> 18446744073709551615

      Les valeurs des champs "nbr_pages" et "annee_publication" seront entre 0 et 65535, c'est pour cela, on a choisit le type SMALLINT.

      Voici les valeurs qu'on va créer dans les deux tables :

      Table "auteurs" :

      id_auteur

      nom_auteur

      prenom_auteur

      1

      el haddioui

      ismail

      Table "livres" :

      id_livre

      id_auteur

      titre_livre

      nbr_pages

      annee_publication

      1

      1

      Algorithmique

      120

      2010

      2

      1

      PHP

      180

      2012

       
      Voici le code complet de la création de la base de données, la création des tables et l'insertion des valeurs de test :
      <?php
      // Connexion au serveur
      $connect = mysql_connect("localhost","root","") or die ("Erreur de connexion au serveur");
      // Création de la base de données
      mysql_query("CREATE DATABASE bd_livres;");
      // Connexion à la base de données
      $db = mysql_select_db("bd_livres",$connect) or die ("Erreur de connexion à la base de données");
      // Création des tables
      mysql_query("CREATE TABLE livres (
          id_livre INT UNSIGNED NOT NULL AUTO_INCREMENT, 
      	id_auteur INT UNSIGNED NOT NULL DEFAULT '0', 
      	titre_livre VARCHAR(50) NOT NULL DEFAULT '', 
      	nbr_pages SMALLINT UNSIGNED NOT NULL DEFAULT '0', 
      	annee_publication SMALLINT UNSIGNED NOT NULL DEFAULT '0', 
      	PRIMARY KEY (id_livre));");
      mysql_query("CREATE TABLE auteurs (
      	id_auteur INT UNSIGNED NOT NULL AUTO_INCREMENT, 
      	nom_auteur VARCHAR(20) NOT NULL DEFAULT '', 
      	prenom_auteur VARCHAR(20) NOT NULL DEFAULT '', 
      	PRIMARY KEY (id_auteur));");
      // Insertion des valeurs
      mysql_query("INSERT INTO auteurs VALUES (1,'el haddioui','ismail');");
      mysql_query("INSERT INTO livres VALUES (1,1,'Algorithmique',120,2010);");
      mysql_query("INSERT INTO livres VALUES (2,1,'PHP',180,2012);");
      // Fermeture de la connexion
      mysql_close($connect);
      ?>
       Remarque : on peut réaliser le même traitement par "mysqli_" ou par "PDO" par une simple modification des instructions de connexion à MySQL, puis le remplacement de la fonction mysql_query() par $mysqli->query() ou par $pdo->exec().

       

    • Affichage des données à partir d'une base de données MySQL

    • Voici un exemple d'affichage des données de la table livres, et aussi un exemple de jointure entre la table livres et la table auteurs par le champ "id_auteur" :

      • Exemple Mysql_:

      <?php
      // Connexion
      $connect = mysql_connect("localhost","root","") or die ("Erreur de connection au serveur");
      $mysql = mysql_select_db("bd_livres",$connect) or die ("Erreur de connection à la base de données");
       
      // Affichage en boucle
      $select_livres = mysql_query("SELECT * from livres;");
      while ($livre = mysql_fetch_assoc($select_livres)){
          while(list($nom_champ,$valeur) = each($livre))
      		echo $nom_champ." : ".$valeur."<br />";
      	echo "<hr />";
      }
       
      // Jointure
      echo "<hr /><b>Jointure : </b><br />";
      if ($select_livre_auteur = mysql_query("SELECT nom_auteur, prenom_auteur, titre_livre, nbr_pages,
      annee_publication FROM livres,auteurs WHERE livres.id_auteur=auteurs.id_auteur AND id_livre=1;")){
      	$nom_auteur = mysql_result($select_livre_auteur, 0, "nom_auteur");
      	$prenom_auteur = mysql_result($select_livre_auteur, 0, "prenom_auteur");
      	$titre_livre = mysql_result($select_livre_auteur, 0, "titre_livre");
      	$nbr_pages = mysql_result($select_livre_auteur, 0, "nbr_pages");
      	$annee_publication = mysql_result($select_livre_auteur, 0, "annee_publication");
       
      	echo "Titre du livre : ".$titre_livre."<br />";
      	echo "Nom d'auteur : ".$nom_auteur." ".$prenom_auteur."<br />";
      	echo "Nombre de pages : ".$nbr_pages."<br />";
      	echo "Année de publication : ".$annee_publication."<br />";
      } else echo "Erreur de la requête";
       
      // Fermeture de connexion à la BD
      mysql_close($connect);
      ?>
      • Exemple Mysqli_:

      <?php
      // Connexion
      $mysqli = new mysqli("localhost", "root", "", "bd_livres");
       
      // Affichage en boucle
      $select_livres = $mysqli->query("SELECT * from livres;");
      while ($livre = $select_livres->fetch_assoc()){
          while(list($nom_champ,$valeur) = each($livre))
      		echo $nom_champ." : ".$valeur."<br />";
      	echo "<hr />";
      }
       
      // Jointure
      echo "<hr /><b>Jointure : </b><br />";
      if ($select_livre_auteur = $mysqli->query("SELECT nom_auteur, prenom_auteur, titre_livre, nbr_pages,
      annee_publication FROM livres,auteurs WHERE livres.id_auteur=auteurs.id_auteur AND id_livre=1;")){
      	$donnees_livre_auteur = $select_livre_auteur->fetch_assoc();
       
      	$nom_auteur = $donnees_livre_auteur['nom_auteur'];
      	$prenom_auteur = $donnees_livre_auteur['prenom_auteur'];
      	$titre_livre = $donnees_livre_auteur['titre_livre'];
      	$nbr_pages = $donnees_livre_auteur['nbr_pages'];
      	$annee_publication = $donnees_livre_auteur['annee_publication'];
       
      	echo "Titre du livre : ".$titre_livre."<br />";
      	echo "Nom d'auteur : ".$nom_auteur." ".$prenom_auteur."<br />";
      	echo "Nombre de pages : ".$nbr_pages."<br />";
      	echo "Année de publication : ".$annee_publication."<br />";
      } else echo "Erreur de la requête";
       
      // Fermeture de connexion à la BD
      $mysqli->close();
      ?>
      • Exemple PDO :

      <?php
      // Connexion
      $pdo = new PDO('mysql:host=localhost;dbname=bd_livres', 'root', '');
       
      // Affichage en boucle
      $select_livre = $pdo->query("SELECT * from livres;");
      while ($livre = $select_livre->fetch(PDO::FETCH_ASSOC)){
          while(list($nom_champ,$valeur) = each($livre))
      		echo $nom_champ." : ".$valeur."<br />";
      	echo "<hr />";
      }
       
      // Jointure
      echo "<hr /><b>Jointure : </b><br />";
       
      $select_livre_auteur = $pdo->query("SELECT nom_auteur, prenom_auteur, titre_livre, nbr_pages, 
      annee_publication FROM livres,auteurs WHERE livres.id_auteur=auteurs.id_auteur AND id_livre=1;");
      $donnees_livre_auteur = $select_livre_auteur->fetch();
       
      $nom_auteur = $donnees_livre_auteur['nom_auteur'];
      $prenom_auteur = $donnees_livre_auteur['prenom_auteur'];
      $titre_livre = $donnees_livre_auteur['titre_livre'];
      $nbr_pages = $donnees_livre_auteur['nbr_pages'];
      $annee_publication = $donnees_livre_auteur['annee_publication'];
       
      echo "Titre du livre : ".$titre_livre."<br />";
      echo "Nom d'auteur : ".$nom_auteur." ".$prenom_auteur."<br />";
      echo "Nombre de pages : ".$nbr_pages."<br />";
      echo "Année de publication : ".$annee_publication."<br />";
       
      ?>

    1. Quel est l'API qui permet de se connecter à plusieurs SGBDR différents ?

    2. mysql_
      mysqli_
      PDO

    3. Quel est l'API qui ne supporte pas l'interface orientée objet ?

    4. mysql_
      mysqli_
      PDO

    5. Quel est le nom d'utilisateur par défaut de MySQL ?

    6. admin
      user
      root
      localhost

    7. Quel est le type du champ parfait pour enregistrer l'âge d'une personne ?

    8. TINYINT
      TINYINT UNSIGNED
      INT
      INT UNSIGNED

    Chapitre précédent
    Chapitre suivant

     
    InfoNuls 2010-2015 - Powered by Manhali