PDO - Base de données
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 $pdo
créé 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 $result
vaudra 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.