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é.

// 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 :

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.

// 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 !

// 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é.

// Traitement, transformer le résultat en tableau associatif
$result = $req->fetchALL(PDO::FETCH_ASSOC);

Vider le jeu d’enregistrements

// Vider le jeu d'enregistrements
$req->closeCursor();

Fermer la connexion

// Fermer la connexion en mettant l'objet à null
$connector = null;

// Ou en utilisant la méthode unset
unset($connector);