info:bdd:sqlphp

Sommaire Bdd

[Mise à jour le 10/8/2021]

Sources

Mots-clés : SGBD, base, table, enregistrement, champ, requêtes, SQL.


En PHP, on se connecte à une base de données avec les méthodes suivantes:

  1. Avec l'extension mysqli_ (modèle procédural lié à MySQL)
  2. Avec l'extension PDO (modèle objet) : à privilégier, car plus moderne et permet l'accès à divers types de BDD (SQLite, MySQL, etc.) avec la même syntaxe.

PDO (PHP Data OBjects) comprend trois classes :

  • PDO pour créer des objets de connexion à la base disposant de méthodes pour l'envoi de requêtes, etc.
  • PDOStatement permettant de gérer des requêtes préparées et des résultats de requête.
  • PDOException qui permet de gérer et d'afficher des informations sur les erreurs.

Extrait de la table jeux_video de la base test utilisée dans les exemples

On utilise le SGBD MySQL pour les exemples de la base test. La table jeux_video peut être téléchargé ici.

L'exploitation d'une base de données se fait à travers les actions suivantes :

  1. Connexion à la base
  2. Envoi de requêtes au serveur
  3. Traitement du résultat des requêtes
  4. Fermeture de la connexion


2.1 Connexion à la base

La connexion à la base se fait une seule fois en créant un objet de la classe PDO.
  • Syntaxe
    nomConnect = new PDO('mysql:host=$host dbname=$base',user,pass);
L'objet $<nomConnect> représente la connexion au serveur. Il est utilisé pour toutes les opérations à effectuer sur la base.
  • Exemple 1 : Connexion à la base test avec le login root, sans mot de passe et sans la gestion des erreurs
*.php
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', ''); 
  • Exemple 2 : Même connexion avec la gestion des d'erreurs
*.php
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage()); // En cas d'erreur, on affiche un message et on arrête tout
}

2.2 Envoi d'une requête

L'information liée au bon fonctionnement de la requête ou son résultat sont placés dans une variable pour être traités.

Cas 1 - Si la requête ne retourne pas de résultat (INSERT, UPDATE, DELETE, etc.), on utilise la méthode exec().

  • Syntaxe
    integer nomConnect exec(string requete)
    nomvar = nomConnect exec(string requete)
exec() retourne un entier contenant le nombre de lignes concernées par la requête.
  • Exemple : modification du possesseur de la console NES identifiée par ID=1 (Initialement Florent)
*.php
$nb=$bdd->exec('UPDATE jeux_video SET possesseur="Laurent" WHERE ID="1"');
  • Résultat

Cas 2 - Si la requête retourne un résultat (SELECT, etc.), on utilise la méthode query().

  • Syntaxe
    object nomConnect query(string requete)
    nomResultat = nomConnect query(string requete)
Retourne FALSE en cas d'erreur ou un objet représentant l'ensemble des lignes de résultat.
  • Exemple : reponse reçoit le résultat de la requête
*.php
$reponse = $bdd->query('SELECT * FROM jeux_video WHERE console="NES"');
  • Résultats issus du traitement décrit au paragraphe suivant
    • Super Mario Bros - Laurent - 4
    • The Rocketeer - Michel - 2
    • Ice Hockey - Michel - 7


2.3 Traitement du résultat de la requête

  • Insertion, suppression, mise à jour
Pour les opérations d'insertion, de suppression ou de mise à jour des données dans une base, il est utile de vérifier si la requête a bien été exécutée.
*.php
echo "<p> $nb ligne(s) modifiée(s) </p>"; // Résultat : 1 ligne(s) modifiée(s)

$nb contient le nombre de lignes modifiées dans l'exemple de cas 1 précédent. Cette valeur pourra être testée pour valider la requête.

  • Résultat d'une commande SELECT
Lorsqu'il s'agit de lire le résultat d'une requête contenant la commande SELECT, la méthode query() retourne un objet de type PDOStatement ($reponse dans les exemples). La classe PDOStatement dispose de méthodes permettant de récupérer des données. La méthode des objets PDOStatement couramment utilisée pour lire des données est fetch().
  • Syntaxe
    array nomResultat fetch(integer type);

    Cette méthode retourne un tableau :
    • pouvant être indicé si type = PDO::FETCH_NUM
    • dont les clés sont les noms des colonnes de la table interrogée si type = PDO::FETCH_ASSOC
    • dont les clés sont mixtes si type = PDO::FETCH_BOTH


Pour lire toutes les lignes du résultat, il faut créer une boucle while qui lit chaque ligne.

  • Exemple
*.php
while ($donnees = $reponse->fetch()) {
    echo '<p>' . $donnees['nom'].' - '.$donnees['possesseur'].' - '.$donnees['prix'].'</p>';
}
  • Résultats
    • Super Mario Bros - Laurent - 4
    • The Rocketeer - Michel - 2
    • Ice Hockey - Michel - 7

2.4 Fermeture de la connexion

Pour clore la connexion, il suffit de détruire l'objet en assignant NULL à la variable qui le gère. Si ce n'est pas fait explicitement, PHP fermera automatiquement la connexion lorsque le script arrivera à la fin.
  • Exemple
*.php
$bdd=null;
  • Pour dialoguer avec MySQL depuis PHP, on fait appel à l'extension PDO de PHP.
  • Avant de dialoguer avec MySQL, il faut s'y connecter. On a besoin de l'adresse IP de la machine où se trouve MySQL, du nom de la base de données ainsi que d'un login et d'un mot de passe.
  • Il faut faire une boucle en PHP pour récupérer ligne par ligne les données renvoyées par MySQL.
  • info/bdd/sqlphp.txt
  • Dernière modification : 2021/08/11 12:10
  • de phil