PHP - PDO
Exemples concrets de mise en pratique
Connexion à une base de données MySql :
$hote = "nomMachine"; // le chemin vers le serveur $base = "bdd"; // le nom de votre base de données $user = "userBdd"; // nom d'utilisateur pour se connecter $passwd = "pwdBdd"; // mot de passe de l'utilisateur pour se connecter $connection = new PDO('mysql:host='.$hote.';dbname='.$base.';charset=utf8', $user, $passwd);
Pour fermer la connection : $connection = null;
Protéger sa BDD des injections SQL : utiliser la méthode PDO ::QUOTE.
Cette méthode s’utilise directement avec la ressource de connexion :
$variablePropre = $connection->quote($variable); $variablePropre = $connection->quote($variable, PDO::PARAM_STR); //même chose
Le deuxième argument (qui est optionnel), est le type de valeur à protéger.
Valeurs possibles pour le deuxième argument :
- PDO ::PARAM_STR : pour une chaîne de caractères ;
- PDO ::PARAM_INT : pour le type ’integer’ de SQL ;
- PDO ::PARAM_NULL : pour le type NULL de SQL ;
- PDO ::PARAM_BOOL : pour un booléen ;
- PDO ::PARAM_LOB : pour le type ’objet large’ de SQL.
Par défaut, si vous ne spécifiez pas de deuxième argument, la valeur PDO ::PARAM_STR sera utilisée.
Méthodes exec et query :
Pour apporter des changements (INSERT, UPDATE, DELETE) à la BDD, on utilise la méthode exec :
$connexion->exec("UPDATE membres SET nom='toto'"); // on modifie le nom de tous les utilisateurs $nb=$connexion->exec("UPDATE membres SET nom='toto'"); // on modifie le nom de tous les utilisateurs et la variable '$nb' renvoi le nombre de lignes affectées.
Pour récupérer une information (SELECT), on utilise la méthode query :
$resultats=$connexion->query("SELECT nom FROM membres"); $resultats->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet while( $ligne = $resultats->fetch() ) { echo 'Membre : '.$ligne->nom.'<br />'; // on affiche les membres } $resultats->closeCursor(); // on ferme le curseur des résultats
Le setFetchMode permet d’indiquer sous quel format on souhaite récupérer les résultats de la requête. Il existe plusieurs méthodes : PDO ::FETCH_ASSOC, PDO ::FETCH_BOTH, PDO ::FETCH_OBJ, etc… (Lire la documentation pour savoir lequel utiliser).
Personnellement j’utilise le FETCH_OBJ qui permet une lecture claire.
Il existe une méthode plus courte d’écriture pour spécifier le mode, directement dans fetch(). Il est préférable de toujours indiquer une méthode (sous cette forme), ce qui facilite la lecture du code :
$ligne = $resultats->fetch(PDO::FETCH_OBJ);
Dans le cas d’un query, pour connaître le nombre de lignes renvoyées par le SELECT on utilise la méthode rowCount() :
$nbResult=$resultats -> rowCount();
Requêtes préparées : la méthode prepare :
Un des gros avantages des requêtes préparées est la protection des injections SQL (plus besoin d’utiliser la méthode quote)
Documentation à venir...