.. ================================================== .. FOR YOUR INFORMATION .. -------------------------------------------------- .. -*- coding: utf-8 -*- with BOM. ================ Connecteur MySQL ================ Afin de connecter une base de données MySQL avec le langage PHP, un connecteur est utilisé: * Connecteur MySQL est de type procédural, il est devenu obsolète depuis la version PHP 5.5 (Ne plus utiliser) * Connecteur MySQLi est de type OO ou procédural, existe depuis la version 4.1 * Connecteur PDO (PHP Data Objects) est de type OO et existe depuis la version 5.1 (celle que nous utiliserons) **PDO** ======= PDO est une extension, autrement dit, elle doit être installée sur le serveur pour être utilisée. Le phpinfo() peut vous renseigner sur l'activation de cette dernière. Pour l'activer, l'extension php_pdo_mysql doit être cochée sur votre serveur. L'avantage est de pouvoir se connecter sur différents systèmes de gestion de base de données tel que MySQL, MariaDB, Oracle ou PostgreSQL. Se connecter ------------ En créant un objet PDO, plusieurs paramètres sont passés, notamment l'hôte, le nom de la base de donnée, le charset, le nom d'utilisateur et le mot de passe. En cas de succès, un objet PDO est retourné. .. code-block:: php // Se connecter via PDO $connector = new PDO('mysql:host=localhost;dbname=db_1;charset=utf8' , 'root', 'pass'); En cas d'erreur, il faut la gérer, voici un exemple : .. code-block:: php try { $connector = new PDO('mysql:host=localhost;dbname=db_1;charset=utf8' , 'root', 'pass'); } catch (PDOException $e) { die('Erreur : ' . $e->getMessage()); } Envoyer une requête SQL ----------------------- Deux méthodes sont utilisées pour faire une requête. La méthode query qui permet d'effectuer une requête et d'obtenir un objet PDOStatement. Avec ce retour, vous devrez utiliser un autre méthode pour traiter les données. Ce type de code est à utiliser uniquement sur des requêtes qui ne comportent **aucun** paramètre. .. code-block:: php // Utilisation de query pour effectuer une requête $req = $connector->query('SELECT * FROM Table'); Une bonne pratique quand on envoie des requêtes et plutôt d'utiliser la préparation des requêtes. Elle permet en cas de paramètres de s'assurer que les variables passées soient sûres. Le risque en ne le faisant pas sont les injections SQL ! .. code-block:: php // Utilisation de prepare, bindValue et execute $req = $connector->prepare('SELECT * FROM Table WHERE id = :varId AND input = :varInput'); $req->bindValue('varId', $id, PDO::PARAM_INT); $req->bindValue('varInput', $input, PDO::PARAM_STR); $req->execute(); Traiter les données ------------------- Dans le cas d'un affichage, les données recueillies lors de la requête doivent être traitée et retournée dans le format souhaité. .. code-block:: php // Traitement, transformer le résultat en tableau associatif $result = $req->fetchALL(PDO::FETCH_ASSOC); Vider le jeu d'enregistrements ------------------------------- .. code-block:: php // Vider le jeu d'enregistrements $req->closeCursor(); Fermer la connexion ------------------- .. code-block:: php // Fermer la connexion en mettant l'objet à null $connector = null; // Ou en utilisant la méthode unset unset($connector);