Introduction à PDO meilleure façon de requêer la base de données en Php

Si vous voulez minimiser les risques d’injection SQL il faut utiliser PDO, n’utilisez plus Mysqli.

Connexion à la base de données:

On est en programmation orientée objet donc utilisez le mot clé new pour instancier une connexion à une base de données.

$pdo = new \PDO($dsn, $user, $pass)

$dsn est une chaine qui défini une ressource de base de données,

$dsn = ‘mysql:host=localhost;dbname=votre_base’;

 

Lancer une requête SQL:

$sql = ‘SELECT * FROM table’;

$stmt = $pdo->prepare($sql);

Avec PDO vous utilisez des requêtes préparées (prepared statement), et ensuite on exécute

$stmt->execute();

et pour retirer les résultats :

$result = $stmt->fetchAll();

Je sais que vous êtes un programmeur curieux, donc vous allez voir la tête de l’objet retourné. Les données ne sont pas bonnes mais c’est pour vous donner la structure du tableau retourné.

Array
(
    [0] => Array
        (
            [id_site] => 10
            [0] => 10
            [domaine] => www.google.fr
            [1] => www.google.fr
        )
)

On remarque que dans l’élément les informations sont doublée mais indexés de façon différent, on a les index numérique et les index alphanumériques.

PDO vous donne en fait le choix de travailler soit avec les tableaux associatifs soit les tableaux classiques.

Si ce sont les champs nommés du tableau associatif qui vous intéressent :

  $result = $stmt->fetchAll(PDO::FETCH_CLASS);

Requête PDO SQL avec une clause WHERE

Regardons comment on fait une requête plus évoluée:

$stmt->prepare(‘SELECT * FROM table WHERE id = :id’);

$stmt->bindParam(‘:id’,$id,PDO::PARAM_INT);

$stmt->execute();

Ici on met un masque dans la clause where et ensuite on attribue une valeur au masque, c’est ici tout l’intérêt de PDO (il y en a d’autres),

paramétrer la requête SQL de cette façon évite les injection SQL. On indique aussi quel est le type de variable on passe

 

On peut passer aussi par valeur au lieu d’une variable php

$stmt->bindValue(‘:id’,50);

 

Une autre façon de passer des paramètres est d’utiliser des points d’interrogation

$stmt->prepare(‘SELECT * FROM table WHERE id = ?’);

$stmt->bindValue(1,50,PDO::PARAM_INT);

Ici l’indice 1 correspond au premier point d’interrogation, quand vous en avez deux vous aurez un sur le premier bind et deux sur le second bind.

 

0 comments… add one

Leave a Comment