[COURS]Les Bases de la PDOStatement

Statut
N'est pas ouverte pour d'autres réponses.

FM|T ZᴏRᴏ

French Modding|Team
Premium
Inscription
28 Février 2011
Messages
32
Réactions
128
Points
3 888
PHP et les Bases de Données

Dans ce cours, nous allons utiliser le type de SGBD nommé MySQL (Racheté par Oracle en 2008) qui est le plus utilisé en "grand public" et aussi en milieu professionnel.
Nous allons également utiliser la Classe PDOStatement (Classe Orienté Objet) pour "dialoguer" avec la base de donnée, qui deviendras (dans le futur (même si elle est déjà pas mal utilisé par les professionnels)) l'interface d'accès à une base de donnée par référence.


La Classe PDOStatement

Introduction:
PDO (PHP Data Objects) est une extension PHP qui définit une interface d'accès à une base de données.
Il a en quelque sorte le même rôle que les fonctions mysql_connect, mysql_query, ...
Il est inclus dans PHP depuis sa version 5.1. Pour la version 5.0, vous pouvez l'obtenir avec l'extension PECL.

D'une manière générale, l'accès à une base de données se réalise en 3 étapes:
1) La Connexion
2) La Requête SQL
3) La Déconnexion

1) La Connexion

Pour dialoguer avec une base de donné, il faut au préalable, déjà se connecter à cette base de donnée. ( sa va mieux.. )

Alors sans plus attendre, nous allons voir comment se connecter à une base de donné.
Avec PDO, vous avez la possibilité de gérer les erreurs (ou pas d'ailleurs ), se qui peut se révéler fort pratique lors des tests afin de voir se qui fonctionne pas.

Script de Connexion à une BDD avec gestion des erreurs:

PHP:
try
{
$db = new PDO('mysql:host=SERVEUR;dbname=NOM-BDD', 'USER', 'PASS');
$db->query('SET NAMES utf8');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}


Comme vous pouvez voir, il faut que vous renseignez les identifiants de connexion à votre BDD (disponible chez votre hébergeur).
Généralement, ce script se met dans un fichier à part des autres, et après on inclus le fichier qui contient ce script dans les fichiers où vous voulez dialoguer avec votre BDD. (Avec la fonction: include "votre_fichier.php";)


Maintenant qu'on s'est connecté avec notre Base de Donnée, nous allons voir comment effectuer des requêtes SQL.

Juste avant, je vais vous montrer comment est structuré une Base de Donnée (vous comprendrez pourquoi lors de nos requêtes SQL.)

Une BDD est composé de table qui elle même est composé de colonnes, vue en schéma, sa donne ceci: (Garder bien cette structure en tête, je vais m'en servir pour vous expliquer la suite )
- Nom-Base-de-Donnée
---- Table :membre:
-------- Colonne (id)
------------ Valeur (1)
------------ Valeur (2)
-------- Colonne (pseudo)
------------ Valeur (ZoRo)
------------ Valeur (xR3PMz)
-------- Colonne (e-mail)
------------ Valeur ([email protected])
------------ Valeur ([email protected])
---- Table (post)
-------- Colonne (id)
-------- Colonne (createur)
-------- Colonne (titre)
-------- Colonne (texte)
-------- Colonne (date)

etc, etc...

Prenez pas peur, avec un peut d'entrainement, se n'est pas si compliqué que cela (pour des requêtes basiques bien sûr... )


Le SELECT


Le SELECT, comme son nom l'indique, sert à sélectionner des données dans la BDD.
Dans un premier temps, nous allons (pour le cours) sélectionner la valeur de la colonne "pseudo" dans la table "membre" où la valeur de la colonne "id" = 1

PHP:
$membre=$db->prepare('SELECT pseudo FROM membre WHERE id=:id');
$membre->bindValue(':id', 1, PDO::PARAM_INT);

Quelque explication:
Le $db est la varibale qui contient la connexion à notre base (rappel du script de connexion..), leprepare sert à préparer notre requête SQL, et on stocke tout ça dans la variable $membre.
Puis on utilise la fonction bindValue pour paramétrer l':id qui représente notre variable qui est égal à "1". Le PARAM_INT indique que c'est un paramètre de type "entier" (nombre).
Note: Il existe beaucoup de types de constantes, pour voir la liste complète, cliqué

Puis nous allons exécuter la requête, et faire un fetch sur cette requête. Le fetch, sert à structurer toutes les valeurs qu'on prend dans la base de donnée.

PHP:
$membre->execute();
$donnee_membre=$membre->fetch();


Puis, pour afficher notre résultat, il faudra faire comme ceci:

PHP:
echo $donnee_membre['pseudo']; // Sa vous affiche : "ZoRo"
$membre->CloseCursor();


Le CloseCursor() sert tout simplement à fermer notre connexion avec la BDD. (A le faire uniquement quand vous avez fini de vous servir des données de votre requête.)

Résumé de la requête complète:
PHP:
$membre=$db->prepare('SELECT pseudo FROM membre WHERE id=:id');
$membre->bindValue(':id', 1, PDO::PARAM_INT);
$membre->execute();
$donnee_membre=$membre->fetch();
echo $donnee_membre['pseudo']; // Sa vous affiche : "ZoRo"
$membre->CloseCursor();


Voila, notre requête de type SELECT est fini et fonctionnelle.
Pour les autres type de requête, je ne vais pas vous re-expliquez tout le code comme je vient de vous le faire, mais uniquement notre requête, donc entraînez-vous bien avec ce bout de code.


L'INSERT

La requête sera structuré de la même manière que notre requête de type SELECT:
L'INSERT, comme son nom l'indique aussi, sert à insérer des données dans une base de donnée.
Pour le cours, nous allons insérer une nouvelle ligne dans notre base de donnée, et plus précisément, dans la table membre.
Donc, il va falloir qu'on renseigne:
- id (Normalement, les id sont en auto-incrémentation; c'est à dire qu'il s'ajoute automatiquement lorsque vous faites une entrée dans la BDD et il s'auto-incrémente (+1 à chaque entrée)) Pour le cours, on l'ajoutera manuellement: on lui donneras comme valeur "3" (Puisque "1" et "2" sont déjà pris), mais sachez que si vous avez un id en auto-incrémentation, vous devez mettre "NULL" comme valeur pour qu'il s'auto-incrémente.
- pseudo (Pour le cours, nous allons mettre: "iMCSx")
- e-mail (Pour le cours, nous allons mettre: "[email protected]")

Tous à vos claviers !! :D

Vous avez toujours pas fini ? :trollface:

Voici la correction : :ok:
PHP:
$query=$db->prepare('INSERT INTO membre (id, pseudo, e-mail) VALUES(:id, :pseudo, :email)');
$query->bindValue(':id',3,PDO::PARAM_INT);
$query->bindValue(':pseudo',"iMCSx",PDO::PARAM_STR); // N'oubliez pas de précisé le PARAM en "STR" vue que "iMCSx" est une chaîne de caractère. (Un texte quoi xD)
$query->bindValue(':email',"[email protected]",PDO::PARAM_STR); // Pareil que pour le pseudo
$query->execute();
$query->CloseCursor();


Un peut d'explication sur la première ligne; le "INSERT INTO" signifie "Insérer dans la table", donc dans la table membre puis, on renseigne les colonnes de la table dans lesquelles ont veut insérer des valeurs: "(id, pseudo, e-mail)" et enfin, on défini les valeurs qu'on veut insérer: "VALUES::):id, :pseudo, :email)".
Pour les autres lignes, maintenant vous le savez. :d:

L'UPDATE

La requête sera structuré de la même manière que notre requête de type INSERT:
L'UPDATE, comme son nom l'indique également, sert à mettre à jour des données dans une base de donnée.
Pour le cours, nous allons mettre à jour la table membre puis, mettre à jour la valeur "ZoRo" et la remplacer par "Bushigan" et enfin mettre à jour la valeur "[email protected]" par "[email protected]".

Au boulot !! :d:



Déjà finis ? :D

Et bien, comparons nos résultat (et voyons les catastrophes que vous m'avez fait :rofl: ):
PHP:
$query=$db->prepare('UPDATE membre SET pseudo=:new_pseudo, e-mail=:new_email WHERE id = :id');
$query->bindValue(':id', 1, PDO::PARAM_INT); // Sert à dire, à quel ligne (entrée) on doit mettre à jour
$query->bindValue(':new_pseudo', "Bushigan", PDO::PARAM_STR); // Le nouveau pseudo
$query->bindValue(':new_email', "[email protected]", PDO::PARAM_STR); // Le nouveau e-mail
$query->execute();
$query->CloseCursor();


Un peut d'explication va pas vous faire de mal, surtout pour la première ligne, car les autres vous connaissez maintenant.
Le UPDATE qui peut se traduire par "Mettre à jour la table", donc Mettre à jour la table membre puis, le SET qui permet de définir nos nouvelles valeurs : pseudo=:new_pseudo et pour finir on lui renseigne le "WHERE" (qui se traduit par: où)


Le DELETE

Le DELETE, comme son nom l'indique également, sert à supprimer des données dans une base de donnée.
Pour le cours, nous allons supprimer la ligne où l'id du membre = 1.

Let' go !! :cool:

PHP:
$query=$db->prepare('DELETE FROM membre WHERE id = :id');
$query->bindValue(':id', 1, PDO::PARAM_INT); // Sert à dire, à quel ligne (entrée) on doit supprimer
$query->execute();
$query->CloseCursor();



Le DELETE FROM qui peut se traduire par "Supprimer de", donc Supprimer de la table membrepuis, le "WHERE" (qui se traduit par: où)

Félicitation, vous venez de voir les 4 types de requête SQL les plus utilisées. :cool:

Il existe une autre structure pour les requêtes SQL en PDO, qui est moins encombrante et qui fait la même chose: (c'est valade pour tout les types de requêtes: UDAPATE, INSERT, DELETE etc )

Pour l'exemple je ais faire la même requête que notre SELECT plus haut:
PHP:
$query = $db->prepare("SELECT pseudo FROM membre WHERE id = :id");
$query->execute(array(
'id' => 1
));


Ceci peut être pas mal, surtout si on doit renseigner plusieurs paramètres..


Vous êtes toujours la ?

Bon, pour résumé un peut sur les requêtes SQL et la Classe PDO, comme vous vous en êtes rendu compte, se n'est pas extrêmement compliqué, du moins pour des requêtes simples, mais sachez qu'avec tout ça, vous avez déjà de quoi vous occuper, croyez-moi. :ok:


Tutoriel entièrement réalisé par mes soins.

Pour toutes questions, informations à propos de se tutoriel, merci de le faire en répondant à ce sujet et non par MP.

Tutoriel sur: Les Bases du PHP
 

sOAnGeLs

Membre
Inscription
10 Mars 2014
Messages
16
Réactions
6
Points
36
Merci du tutoriel sa permettras à beaucoup de s'initier a PHP.
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut