Médiaforma

All posts tagged php

Pour se connecter à une base de données MySQL, nous utiliserons une approche objet avec l’extension PDO (PHP Data Object). La technique étudiée ici est utilisable sur d’autres bases de données. Par exemple PostgreSQL ou Oracle.

Activer PDO

Avant de pouvoir utiliser PDO, vous devez activer cette extension. En principe, elle devrait être activée par défaut par WampServer. Pour le vérifier, cliquez sur l’icône de WampServer dans la zone de notification, pointez PHP puis Extensions PHP. Une coche devrait être affichée devant php_pdo_mysql, comme dans la figure ci-contre.

Si l’extension php_pdo_mysql n’est pas précédée d’une coche, cliquez dessus, fermez puis redémarrez WampServer. L’extension php_pdo_mysql devrait maintenant être activée.

Remarque
Si vous n’utilisez pas WampServer, vous pouvez activer/désactiver l’extension php_mysql en agissant sur le fichier php.ini (dossier Apache 2.x.x\bin\). Recherchez la ligne contenant le terme “php_pdo_mysql”. Supprimez le “;” qui la précède pour activer l’extension ou insérez un “;” pour la désactiver. Ici par exemple, l’extension php_pdo_mysql est active :


Arrivés à ce point dans la formation, vous utilisez couramment les fonctions du langage PHP. Mais saviez-vous que le langage SQL possède ses propres fonctions ? Ces dernières pourront être utilisées dans des requêtes pour affiner les recherches.

Il existe deux types de fonctions SQL :

  • Les fonctions scalaires. Elles s’appliquent à chacune des valeurs qui lui sont passées. Quelques exemples : UPPER(), LOWER(), LENGTH(), ROUND().
  • Les fonctions d’agrégat. Elles effectuent des calculs sur une table et retournent un résultat. Quelques exemples : AVG(), SUM(), MAX(), MIN(), COUNT().

Voyons comment utiliser ces fonctions sur des exemples précis.

Nous allons convertir en minuscules les valeurs du champ CustomerID et en majuscules les valeurs du champ Country de la table northwind . Voici la table northwind avant et après la conversion :

Pour arriver à ce résultat, vous utiliserez les fonctions scalaires LOWER() et UPPER() :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Utilisation de fonctions SQL</title>
    <style>
      td { padding-right: 30px;}
    </style>
  </head>
  <body>
    <?php
      try {
        $base = new PDO('mysql:host=localhost; dbname=northwind', 'root', '');
      }
      catch(exception $e) {
        die('Erreur '.$e->getMessage());
      }
      $base->exec("SET CHARACTER SET utf8");
      $retour = $base->query('SELECT LOWER(CustomerID) as CustomerID_min, UPPER(Country) as Country_maj FROM customers');
      echo "<table>";
      while ($data = $retour->fetch()){
        echo "<tr><td>".$data['CustomerID_min']."</td>";
        echo "<td>".$data['Country_maj']."</td></tr>";
      }
      echo "</table>";
      $base = null;
    ?>
  </body>
</html>

Exécutons ce code dans WAMP Server. Le résultat est bien conforme à ce qui était attendu.

Un autre exemple. Supposons que vous vouliez connaître la valeur moyenne du champ Quantity de la table order_details de la base de données northwind.

Vous utiliserez pour cela la fonction d’agrégat AVG() :

SELECT AVG(Quantity) FROM order_details;

Pour saisir facilement cette requête, rien de tel que l’interface d’administration phpMyAdmin. Cliquez sur la base de données northwind dans le volet gauche. Basculez sur l’onglet SQL. Entrez la requête dans la zone dédiée, puis cliquez sur Exécuter. Le résultat est immédiatement affiché dans la partie inférieure de la fenêtre.


Exercice

  1. Affectez le mot de passe ‘secret’ à l’utilisateur root
  2. Annulez le mot de passe de l’utilisateur root
  3. Créez l’utilisateur Pierre sur le serveur localhost
  4. Affectez le mot de passe ‘monpass’ à l’utilisateur Pierre
  5. Affectez tous les privilèges à l’utilisateur Pierre sur les tables de la base localhost
  6. Supprimez l’utilisateur Pierre

Solution

Faites une pause dans la vidéo et répondez à ces six questions. Vous pourrez reprendre le visionnage de la vidéo pour prendre connaissance des solutions.

Affectation du mot de passe ‘secret’ à l’utilisateur root

Pour savoir à quel serveur est attaché l’utilisateur root, on utilise la commande suivante :

select host, user from mysql.user;

Voici la réponse retournée par MySQL :


L’utilisateur root est donc rattaché au serveur ‘::1’.

Il suffit maintenant d’utiliser la commande suivante pour affecter le mot de passe ‘secret’ à l’utilisateur root :

set password for 'root'@'::1' = PASSWORD('secret');

Suppression du mot de passe affecté à l’utilisateur root

Utilisez la commande suivante :

set password for 'root'@'::1' = PASSWORD('');

Création de l’utilisateur Pierre sur le serveur localhost

Utilisez la commande suivante :

CREATE USER 'Pierre'@'localhost';

Vérifiez que cet utilisateur a bien été créé avec la commande suivante :

SELECT host, user FROM mysql.user;

Affectation d’un mot de passe à l’utilisateur Pierre

Lancez la commande suivante :

SET PASSWORD FOR 'Pierre'@'localhost' = PASSWORD('monpass');

Affectation de privilèges à l’utilisateur Pierre sur les tables de la base localhost

Utilisez la commande suivante :

GRANT ALL PRIVILEGES ON localhost.* TO 'Pierre'@'localhost' IDENTIFIED BY 'monpass';

Suppression de l’utilisateur Pierre

Utilisez la commande suivante :

DROP USER 'Pierre'@'localhost';

Vérifiez que l’utilisateur Pierre a bien été supprimé avec cette commande :

SELECT host, user FROM mysql.user;

 


Plusieurs commandes SQL peuvent être utilisées pour :

  • créer un utilisateur ;
  • lui affecter des droits pour déterminer ce qu’il peut faire ;
  • supprimer un utilisateur.

Voici les commandes les plus courantes.

Commande Effet
USE mysql;

SELECT * FROM user;

Liste les utilisateurs MySQL
SELECT * FROM mysql.user; Une variante monoinstruction des deux commandes précédentes
USE mysql;

SELECT host, user FROM user;

Affiche les champs host et user des utilisateurs MySQL
SELECT host, user FROM mysql.user; Une variante monoinstruction des deux commandes précédentes
SELECT current_user(); Affiche le nom de l’utilisateur en cours
CREATE USER ‘nom’@’serveur’; Crée l’utilisateur nom sans mot de passe sur le serveur spécifié. Par exemple :

CREATE USER ‘Pierre’ @ ‘localhost’;

CREATE USER ‘nom’@’serveur’ IDENTIFIED BY ‘p’; Crée l’utilisateur avec le mot de passe p sur le serveur spécifié. Par exemple :

CREATE USER ‘Paul’@’localhost’ IDENTIFIED BY ‘monpass’;

GRANT ALL PRIVILEGES ON base.*

TO ‘nom’@’serveur’

IDENTIFIED BY ‘passe’;

Donne à l’utilisateur nom sur le serveur spécifié avec le mot de passe spécifié le droit d’accéder à la base de données base. Par exemple :

GRANT ALL PRIVILEGES ON testconsole.* TO ‘Pierre’@’localhost’;

SHOW GRANTS; Affiche les droits du compte utilisé pour se connecter au serveurcreatedatabase
DROP USER ‘nom’@’base’; Supprime l’utilisateur nom de la base spécifiée. Par exemple :

DROP USER ‘pierre’@’localhost’;

SET PASSWORD FOR ‘nom’@’base’ = PASSWORD(‘pass’); Affecte le mot de passe pass à l’utilisateur nom de la base de données base.

 

Remarque

Si vous avez perdu le mot de passe de l’utilisateur root, suivez la procédure décrite ici pour le réinitialiser :

http://www.commentcamarche.net/forum/affich-23919767-se-connecter-a-wampserver


Il est temps de passer à la pratique. Dans cette partie, vous allez écrire plusieurs scripts pour faire vos armes en POO PHP. Pour cela, nous allons travailler sur une classe spécialisée dans le traitement des chaînes de caractères. Cette classe contiendra plusieurs méthodes permettant de simplifier les manipulations des chaines de caractères.

Pour définir une classe, il suffit d’utiliser le mot class suivi du nom de la classe. Par exemple :

class chainePlus {
  // Une ou plusieurs instructions
}

Pour définir les propriétés de la classe, vous utiliserez le mot-clé :

  • public si la propriété doit être accessible dans la classe, les classes dérivées et les objets ;
  • private si la propriété doit être accessible dans la classe seulement ;
  • protected si la propriété doit être accessible dans la class et ses classes dérivées.

Par exemple :

private $nomProp;

Où nomProm est le nom d’une propriété.

Pour définir des fonctions membres, vous utiliserez cette syntaxe :

public function nom(){
  // Une ou plusieurs instructions
  // $this->nomProp permet d'accéder à la propriété nomProp
}
Remarque
Par convention, il est préconisé de sauvegarder la classe sous le nom nomClasse.class.php (où nomClasse est le nom de la classe). 

 

 


Lorsque vous créez une table MySQL, vous devez définir le type de données des champs de la table. Il existe trois grands types de données :

  • Numérique
  • Chaine de caractères
  • Date et heure

Les champs numériques peuvent être du type

Type Signification
tinyint Occupe 1 octet. Peut stocker des nombres entiers compris entre -128 à 127 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 et 255 dans le cas contraire.
smallint Occupe 2 octets. Ce type de données peut stocker des nombres entiers compris entre -32 768 à 32 767 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 et 65 535 dans le cas contraire.
mediumint Occupe 3 octets. Ce type de données peut stocker des nombres entiers compris entre -8 388 608 et 8 388 607 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 et 16 777 215 dans le cas contraire.
int Occupe 4 octets. Ce type de données peut stocker des nombres entiers compris entre -2 147 483 648 et 2 147 483 647 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 à 4 294 967 295 dans le cas contraire.
bigint Occupe 8 octets. Ce type de données stocke les nombres entiers compris entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 à 18 446 744 073 709 551 615 dans le cas contraire.
float Occupe 4 octets. Ce type de données permet de stocker des nombres flottants à précision simple, compris entre -1.175494351E-38 et 3.402823466E+38 (non UNSIGNED) ou entre 0 et 3.402823466E+38 (UNSIGNED).
double ou real Occupe 8 octets. Stocke des nombres flottants à double précision compris entre -1.7976931348623157E+308 et -2.2250738585072014E-308, et entre 2.2250738585072014E-308 et 1.7976931348623157E+308 (non UNSIGNED). Si l’attribut UNSIGNED est précisé, les nombres négatifs sont retirés.

 

Les champs chaines de caractères peuvent être du type

Type Signification
Char Chaîne de caractères de taille fixe
Varchar Chaîne de caractères de longueur variable comprise entre 1 et 255 caractères
tinyblob Chaîne de 0 à 255 caractères (sensible à la casse)
tinytext Chaîne de 0 à 255 caractères (insensible à la casse)
Blob Chaîne de 0 à 65 535 caractères (sensible à la casse)
Text Chaîne de 0 à 65 535 caractères (insensible à la casse)
mediumblob Chaîne de 0 à 16 777 215 caractères (sensible à la casse)
mediumtext Chaîne de 0 à 16 777 215 caractères (insensible à la casse)
longblob Chaîne de 0 à 4 294 967 295 caractères (sensible à la casse)
longtext Chaîne de 0 à 4 294 967 295 caractères maximum (insensible à la casse)

 

Les champs date et heure peuvent être du type

Type Signification
date Occupe 3 octets. Date au format AAAA-MM-JJ, entre 1000-01-01 et 9999-12-31
time Occupe 3 octets. Date au format AAAA-MM-JJ  entre1000-01-01 et 9999-12-31
datetime Occupe 8 octets. Date et heure au format AAAA-MM-JJ HH:MM:SS entre 1000-01-01 00:00:00 et 9999-12-31 23:59:59
year Occupe 1 octet. Année à 2 ou 4 chiffres entre 1901 et 2155 ( 4 chiffres) ou entre 1970 et 2069 (2 chiffres)
timestamp Occupe 4 octets. Date codée sous une forme numérique et comprise entre 1970-01-01 00:00:00 et l’année 2037

 


La console MySQL peut être utilisée pour lancer rapidement des commandes SQL.

Connexion en tant que root

Pour ouvrir la console MySQL, cliquez sur l’icône de WAMPServer dans la zone de notifications, pointez MySQL et cliquez sur Console MySQL. La console se connecte à MySQL en utilisant le compte root. Le mot de passe de ce compte vous est demandé. Comme aucun mot de passe n’est affecté au compte root, appuyez simplement sur la touche Entrée du clavier :

Connexion autre que root

Si vous voulez vous connecter sous un autre nom d’utilisateur, ouvrez une fenêtre Invite de commandes dans le dossier c:\wamp\bin\mysql\mysql5.6.12\bin et tapez la commande suivante :

mysql –u ‘nom’ –p

Où nom est le nom d’utilisateur avec lequel vous voulez vous connecter.

Entrez le mot de passe associé à l’utilisateur et appuyez sur la touche Entrée pour vous connecter. Si aucun mot de passe n’est associé à l’utilisateur, appuyez simplement sur la touche Entrée :

Modification du mot de passe associé à un utilisateur

Reportez-vous à la section intitulée “Administration des utilisateurs” pour savoir comment changer le mot de passe associé à un utilisateur quelconque (y compris root).