0% ont trouvé ce document utile (0 vote)
3 vues20 pages

PHP POO Et BD

Le document présente les différentes extensions de PHP pour la gestion des bases de données, notamment mysql_, mysqli_ et PDO. Il explique comment établir une connexion à une base de données en utilisant PDO, ainsi que les méthodes pour exécuter des requêtes simples et préparées tout en garantissant la sécurité contre les injections SQL. Enfin, il aborde le pattern design singleton pour gérer les connexions à la base de données et les opérations d'ajout, de modification et de suppression d'enregistrements.

Transféré par

snedmeaphoto
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues20 pages

PHP POO Et BD

Le document présente les différentes extensions de PHP pour la gestion des bases de données, notamment mysql_, mysqli_ et PDO. Il explique comment établir une connexion à une base de données en utilisant PDO, ainsi que les méthodes pour exécuter des requêtes simples et préparées tout en garantissant la sécurité contre les injections SQL. Enfin, il aborde le pattern design singleton pour gérer les connexions à la base de données et les opérations d'ajout, de modification et de suppression d'enregistrements.

Transféré par

snedmeaphoto
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PHP Accès à la BD

Extensions gestion BD

Pour la gestion des Bases de données, PHP offre plusieurs extensions :


 L'extension mysql_ : Ensemble de fonction commençons par mysql_ et permettant de
communiquer avec mysql. Elle sont devenue obsolète.

L'extension mysqli_ : ce sont des fonctions améliorées d'accès à MySQL.

L'extension PDO : Outil complet qui permettant une abstraction du type de la base de
données traitée permettant ainsi de se connecter aussi bien à MySQL que PostgreSQL
ou Oracle.
PHP Accès à la BD
Extensions gestion BD
PHP Accès à la BD
PDO

PDO : PHP Data Objects

Extension fournissant des services d’accès aux bases de données.

Fournie avec plusieurs drivers (MySQL, sqlite, PostgreSQL

Disponible par défaut à partir des serveurs PHP 5.1.0


PHP Accès à la BD
Connexion à une BD

Pour se connecter à une base de données on instancie un objet PDO de la façon


suivante :
$maDb_connexion = new PDO('mysql:host=localhost;dbName=nomDeLaBase',
'userName', 'motDePasse');
On crée donc une nouvelle instance de PDO qu’on récupère dans la variable
$maDb_connexion. Le constructeur nécessite trois paramètres :

 le driver utilisé, l'adresse du serveur et le nom de la base noté ainsi driver:hot=serveur;


dbName=nomDeLaBase'
 le nom d'utilisateur à utiliser pour la connexion au serveur
 le mot de passe du dit utilisateur
• Ces informations différent un peu selon le pilote.
PHP Accès à la BD
Connexion à une BD

Afin de gérer les erreurs liées à la Connexion à la BD, il faut capturer les erreurs de
type PDOException.

try {
$db_connexion = new PDO('mysql:host=localhost;dbname=user1', 'user1',
'motdepass');
} catch (PDOException $e) {
print "Erreur : " . $e->getMessage();
die();
}
PHP Accès à la BD
Pattern Design singleton

Pattern Design singleton


But : Singleton garantit qu’une classe n’a qu’une seule instance et fournit un point
d’accès global à cette instance.
Principe
Empêcher les développeur d’utiliser le ou les constructeurs de la classe : déclarer
privé tous les constructeurs de la classe.
Problème : la classe n’est plus instanciable que par elle-même.
Solution : Construire un pseudo constructeur à travers une méthode static. Par
convention il sera appelé getInstance.
On crée un attribut statique stockant l’unique instance de la classe.
Dans getInstance on teste si cet attribut est nul
Si null on instancie un objet et on le retourne
Sinon on retourne l’instance existante
PHP Accès à la BD
Pattern Design singleton
<?php
class ConnexionBD
{
private static $_dbname = "bdphp5";
private static $_user = "root";
private static $_pwd = "";
private static $_host = "localhost";
private static $_bdd = null;
private function __construct()
{
try {
self::$_bdd = new PDO("mysql:host=" . self::$_host . ";dbname=" . self::$_dbname . ";charset=utf8", self::$_user, self::$_pwd,
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
} catch (PDOException $e) {
die('Erreur : ' . $e->getMessage());
}
}
public static function getInstance()
{
if (!self::$_bdd) {
new ConnexionBD();
}
return (self::$_bdd);
}
}
PHP Accès à la BD
Pattern Design singleton

Afin d’afficher les détails des erreurs liées à la BD, il faut activer le suivi de ces erreurs
lors de la connexion à la BD.
try {
$db_connexion = new PDO('mysql:host=localhost;dbname=user1', 'user1',
'motdepass', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
} catch (PDOException $e) {
print "Erreur : " . $e->getMessage();
die();
}
PHP Accès à la BD
Requête simple

Afin d’interroger une BD via PDO, nous utilisons la méthode query qui prend en
paramètre la requête à exécuter.
Exemple :
$req=« select * From maTable »;
$reponse = $_bdd->query($req);
La variable $reponse contiendra un objet contenant la réponse de MySQL qui n’est pas
directement exploitable.
Pour exploiter ces données nous utilisons la méthode fetch qui retourne une ligne ou
fetchAll qui retourne un tableau contenant toutes les lignes du jeu d'enregistrements
L’un des paramètres des méthodes fetch et fetchAll est l’attribut fetch_style qui permet
de spécifier le type de la valeur de retour de fetch et fetchAll
PHP Accès à la BD
Fetch style

Contrôle comment la prochaine ligne sera retournée à l'appelant. Cette valeur doit être
une des constantes PDO::FETCH_*.
PDO::FETCH_BOTH (défaut): retourne un tableau indexé par les noms de colonnes et
aussi par les numéros de colonnes, commençant à l'index 0, comme retournés dans le
jeu de résultats
PDO::FETCH_ASSOC : retourne un tableau indexé par le nom de la colonne comme
retourné dans le jeu de résultats
PDO::FETCH_NUM : retourne un tableau indexé par le numéro de la colonne comme
elle est retourné dans votre jeu de résultat, commençant à 0
PDO::FETCH_OBJ : retourne un objet anonyme avec les noms de propriétés qui
correspondent aux noms des colonnes retournés dans le jeu de résultats
…
PHP Accès à la BD
Fetch style

Exemple de parcours en utilisant des objets :

$games = $rep->fetchAll(PDO::FETCH_OBJ);

foreach($games as $game) :
echo $game->nom." - ".$game->commentaires."<br>";
endforeach;
PHP Accès à la BD
Requête paramétrable

Afin de paramétrer une requête nous pouvons utiliser deux méthodes:

Paramétrage manuelle en concaténons les paramètres dans la requête. ENORME


FAILLE DE SECURITE SQL INJECTION

les requêtes préparées

Deux types de requêtes préparées :

En utilisant les marqueurs « ? »

En utilisant les marqueurs nominatifs


PHP Accès à la BD
Requête préparée

Pour simplifier les choses une requête préparé est une requête dont les paramètres
sont insérés dans la fonction lors de l’exécution.
Elle est effectuée en 2 étapes :
Préparer la requête à l’aide de la méthode prepare
Transmettre les paramètres dans un tableau et exécuter la requête préparée à l’aide
de la méthode execute
Les paramètres sont indiqués dans l’ordre d’apparition dans la requête préparée
Le contenu des variables est automatiquement sécurisé pour prévenir les risques
d'injection SQL.
Exemple :prepare
$req = $bdd->prepare ('SELECT * FROM personne WHERE nom = ? AND age <= ?
ORDER BY cin');
$req->execute(array($nom, $age));
PHP Accès à la BD
Requête préparée

Pour simplifier les choses une requête préparé est une requête dont les paramètres
sont insérés dans la fonction lors de l’exécution.
Elle est effectuée en 2 étapes :
Préparer la requête à l’aide de la méthode prepare
Transmettre les paramètres dans un tableau et exécuter la requête préparée à l’aide
de la méthode execute
Les paramètres sont indiqués dans l’ordre d’apparition dans la requête préparée
Le contenu des variables est automatiquement sécurisé pour prévenir les risques
d'injection SQL.
Exemple :
$req = $bdd->prepare('SELECT * FROM personne WHERE nom = ? AND age <= ?
ORDER BY cin');
$nom=« test »;$age=« 10 »;
$req->execute(array($nom, $age));
PHP Accès à la BD
Requête préparée

Requête paramétrable avec des marqueurs nominatifs


Afin de rendre la requête préparée plus lisible, ion peut remplacer les ? Par des
marqueurs nommés
Un marqueur nommé est un nom précédé par « : »

Exemple :
$req = $bdd->prepare('SELECT * FROM personne WHERE nom = :nom AND age <=
:age ORDER BY cin');
$req->execute(array(‘nom’=>$nom, age=>$age));

L’ordre des paramètres n’a plus d’importance vu que nous utilisons des tableaux
associatifs.
PHP Accès à la BD
Requête préparée

Afin de récupérer le nombre d’enregistrement retourné par la requête on utilise la


méthode rowCount.

Exemple :
$req="select * maTable";
$rep = $bdd->query($req);
echo "le nombre d'enregistrements est :".$rep->rowCount();
Afin de récupérer l’id du dernier enregistrement, on utilise la méthode lastInsertedId.

Remarque : Ca ne marche qu’après un INSERT.

Exemple :
echo "le dernier id est :".$bdd->lastInsertId()."<br>";
PHP Accès à la BD
Ajout d’enregistrement BD

Afin d’ajouter, modifier et supprimer un enregistrement dans la Base de données PDO


nous offre la méthode execute.
Cette méthode prend en paramètre la requête à exécuter.
On peut utiliser la méthode prépare afin de préparer la requête à exécuter.
$req= $bdd->prepare(« La requête à préparer »)
Une fois la requête préparée, on utilise la méthode execute en lui passant un tableau
associatif contenant la liste des paramètres.
$req= $bdd->prepare("insert into matable (`champ1`,
`champ2`, `champn`) VALUES (:val1,:val2,:valn)");
$req->execute(array(
'val1'=>'val1',
'val2'=>'val2',
'valn'=>5
));
PHP Accès à la BD
Modification d’enregistrement BD

 Même fonctionnement que l’ajout.

 Requête update.

$req= $bdd->prepare(« update matable set champ1=:val1,


champ2= :val2, champ3= :champ3 where champ_condition=
:cnd");

$req->execute(array(
'val1'=>‘newval1',
'val2'=>‘newval2',
'valn'=>7,
‘cnd'=>’valCnd’,
));
PHP Accès à la BD
Suppression d’enregistrement BD

 Même fonctionnement que l’ajout et la mise à jour.

 Requête delete.

$req= $bdd->prepare(« delete from matable where


champ_condition= :cnd");

$req->execute(array(
‘cnd'=>’valCnd’,
));
%
50
e
nic
r Se
one
Cum
C

ce
erv
rS
ma
Cat
ter
ow
Ru

Vous aimerez peut-être aussi