PDO - Base de données

PDO - Base de données

2 May 2021

PDO (PHP Data Object) est une extension de PHP permettant d'accéder à une base de données. L'ancienne méthode et déprécié depuis était d'utiliser la fonction mysql_connect(), mysql_query(), etc.

PDO permet une abstraction des données, c'est-à-dire que peu importe le serveur SQL utilisé (MySQL, PostgreSQL, etc), l'exécution et la récupération des données est la même. Comme chaque serveur SQL est différent, vous aillez sûrement à réécrire des requêtes SQL si vous veniez à changer de SGBD (Système de Gestion de Base de Données).

Connexion à la base de données

C'est la partie la plus simple de PDO. ?

$pdo = new PDO('mysql:host=localhost;dbname=ma_base_de_donnees', 'utilisateur', 'mot de passe');
// ma_base_de_donnees : nom de votre base de données ?
// utilisateur : identifiant de connexion à votre BDD
// mot de passe : mot de passe de connexion à votre BDD

Évidemment, adapté les valeurs à votre projet.
Généralement, le code de connexion se situe dans un fichier qui est rappelé dès que l'on doit de se connecter à la base de données.

Exécuter une requête simple

Pour exécuter une requête SQL simple, nous allons avoir besoin de la variable $pdocréé plus haut.

$query = $pdo->query('SELECT * FROM ma_table');

La méthode query() exécutera la requête SQL passée en paramètre.

Passer des valeurs

Si votre requête a besoin de valeur pour fonctionner comme un ID ou autre chose, la méthode prepare() sera l'idéal pour cela.

$query = $pdo->prepare('SELECT * FROM ma_table WHERE ville = :ville');
$query->bindValue(':ville', 'Nantes');
$query->execute();

Cette fois-ci la requête contient une variable interne :ville. Nous lui soumettons une valeur en utilisant la méthode bindValue()qui protège la donnée passée contre les injections SQL notamment. Enfin, on exécute le tout avec la méthode execute().

Lire les valeurs

fetchAll()

$results = $query->fetchAll();

La méthode fetchAll() permet quant à elle de saisir tous les enregistrements trouvés par la requête que nous stockons dans la variable $results. Si jamais aucun enregistrement n'est trouvé, alors $results vaudra false, sinon il contiendra un tableau associatif contenant les données dénichées.

Pour cela, vous devrez utiliser une boucle pour lire ces données :

foreach($results as $item) {
  // ...
}

fetch()

$result = $query->fetch();

La méthode fetch() permet quant à elle de récupérer un seul enregistrement et le premier trouvé par la requête. Si jamais aucun enregistrement n'est décelé, alors $resultvaudra false, sinon il contiendra un tableau associatif contenant la donnée repérée.

Dans ce cas, inutile d'utiliser une boucle lire la donnée. Une simple lecture du tableau est suffisante.