Publié le 20/09/2011
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
2 commentaires

Selectionner des donnees avec l'interface PDO

L'extension PDO (PHP Data Objects) est une interface quasi universelle d'accès aux bases de données. Au lieu de développer une class pour chaque SGBD, un code source avec PDO utilise le même code pour plusieurs bases de données. En plus de ce coté universelle, l'extension PDO simplifie grandement l'utilisation de requête préparée, des transactions et de la gestion des erreurs.

Présentation de l'extension PDO


Pilote base de donnée: l'interface PDO permet d'accéder aux base de données les plus courantes:
- FreeTDS / Microsoft SQL Server / Sybase (PDO_DBLIB),
- Firebird / Interbase 6 (PDO_FIREBIRD),
- PostgreSQL (PDO_PGSQL),
- Microsoft SQL Server / SQL Azure (PDO_SQLSRV),
- SQLite 3 et SQLite 2 (PDO_SQLITE),
- et bien entendu ... MySQL 3.x/4.x/5.x (PDO_MYSQL).

Gestion des erreurs: les échecs de connexion ou les requêtes incorrectes génèrent une erreur de type PDOException. Elles sont traitées à la manière d'une class PHP5
<?php
try {
    $pdo = new PDO('...');
    $stmt = $pdo->query("...");
} catch (PDOException $e) {
    echo 'Error: ' . $e->getMessage();
}
?>

Mise en garde: le connecteur aux bases de données est universel, par contre, chaque SGDB conserve certaines spécificités qui ne sont pas pris en charge par l'interface. Parfois le code source devra être adaptée à la base de donnée en ce concerne la syntaxe SQL ou la disponibilité de certaines fonctions par ex. rowCount().

Remplacer mysql_xxx par PDO

Pour une requete de sélection, voyons comment remplacer les fonctions mysql_xxx par celle de PDO. Si vos class MySQL contiennent déjà les requêtes préparées, la gestion des erreurs et les transactions, il y a peu de chose à modifier. D'une manière générale, l'utilisation de PDO apporte une clarté et de la rigueur dans la manière de développer en PHP.

Base de donnée
Pour l'exemple d'une requête SELECT, nous allons utiliser une table nommée tbl_agenda
- Structure de la table `tbl_agenda`
CREATE TABLE IF NOT EXISTS `tbl_agenda` (
`AGA_ID` int(11) NOT NULL auto_increment,
`AGA_NOM` varchar(64) NOT NULL,
`AGA_PRENOM` varchar(64) NOT NULL,
PRIMARY KEY (`AGA_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

-- Contenu de la table `tbl_agenda`
INSERT INTO `tbl_agenda` (`AGA_ID`, `AGA_NOM`, `AGA_PRENOM`) VALUES
(1, 'DUCHEMIN', 'Gérard'),
(2, 'GEORGES', 'Remy');

Sélection des données avec mysql_xxx

Pour sélectionner un ensemble de donnée avec les fonctions MySQL, le code source prend cette forme. Le style est volontairement 'PHP3 like' pour montrer la différence avec PDO.
La gestion des erreurs est basique, dans le sens, les erreurs sont levées sans pour autant définir un traitement spécifiques aux problèmes rencontrés.
<?php
$DB_SERVER = "localhost";
$DB_USER = "user";
$DB_PASSWORD = "motdepasse";
$DB_NAME3 = "db3";
$SQL="SELECT * from tbl_agenda";
 
// Se connecter au serveur de base de données 
mysql_connect($DB_SERVER, $DB_USER, $DB_PASSWORD) or die("Echec de connexion");
// Sélectionner la base 
mysql_select_db($DB_NAME3) or die("BDD introuvable");
// Effectuer la requete
$query=mysql_query($SQL);
// Parcourir les données
while($row = mysql_fetch_assoc($query)){
    print_r($row);
}
//Fermer la connexion
mysql_close();
?>
Résultat
Array ( [AGA_ID] => 1 [AGA_NOM] => DUCHEMIN [AGA_PRENOM] => Gérard )
Array ( [AGA_ID] => 2 [AGA_NOM] => GEORGES [AGA_PRENOM] => Remy )

Sélection des données avec PDO

Avec les fonctions PDO, une requête est transmise de la même manière au serveur de base de donnée. Le constructeur de l'objet PDO fixe les propriétés suivantes:
- le choix du pilote SGBD,
- l'adresse du serveur,
- le couple utilisateur et mot de passe,
- le nom de la base de donnée.
<?php 
$DB_SERVER = "localhost";
$DB_USER = "user";
$DB_PASSWORD = "motdepasse";
$DB_NAME3 = "db3";
$DB_DRIVER = "mysql";
 
$SQL = "SELECT * from tbl_agenda";
 
try {
    // Se connecter au serveur avec le pilote MySQL et sélectionner la base de données
    $pdo = new PDO($DB_DRIVER . ':host=' . $DB_SERVER . ';dbname=' . $DB_NAME3, $DB_USER, $DB_PASSWORD);
    // Effectuer la requete
    $stmt = $pdo->query($SQL);
    // Parcourir les données
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        print_r($row);
    }
    // Fermer la connexion du serveur
    $stmt->closeCursor();
    //Détruire l'objet PDO
    $pdo = null;
} catch (PDOException $e) {
    //Exemple d'erreur possible
    //SQLSTATE[28000] [1045] Access denied for user
    //SQLSTATE[42000]: Syntax error or access violation
    echo 'Error: ' . $e->getMessage();
}
?>
Résultat
Array ( [AGA_ID] => 1 [AGA_NOM] => DUCHEMIN [AGA_PRENOM] => Gérard )
Array ( [AGA_ID] => 2 [AGA_NOM] => GEORGES [AGA_PRENOM] => Remy )

Conclusion

L'utilisation de PDO ne révolutionne pas l'accès aux bases de données et est assez simple à mettre en place. A mon sens, l?intérêt réside dans la manière de construire ses class PHP avec PDO.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar dotnet

Publié par dotnet

le 05/12/2011 à 13:55:56

Cette interface est intéressant par le fait qu'elle soit universelle, donc son intérêt pour moi est qu'elle permet l'accès aux bases de données Microsoft SQL Server. Je suis plus à l'aise avec les outils et composants DotNET.

avatar xnadyx

Publié par xnadyx

le 17/04/2012 à 16:22:19

Bonjour,

Est ce qu'il y a un autre moyen d'acces aux donnees Microsoft SQL Server?
Je ne trouve pas de tutoriaux sur Internet.

Merci.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - db
Mise a jour
20/09/2011
Visualisation
vu 4892 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par traitstone dans CMS

c'est bou et tres bon chose

Publié par fobec dans logiciel

MAJ: migration vers GoogleMap V3 de la carte

Publié par Loualfcha dans CMS

Je n'arrive pas &Atilde;&nbsp; installer le logiciel<br>Message d'erreur: DeleteFile a &Atilde;&copy;chou&Atilde;&copy;; code 5<br>Acc&Atilde;&um...

Publié par Josalado dans CMS

je n'arrive pas à installer le logiciel <br>Message d'erreur : l'assistant d'installation n'a pas pu créer le dossier C:\program Files\Olibul <br>...

Publié par steev dans java

Bjr,
je voudrai savoir comment mettre le son en pause?
aussi comment faire qr qu'il tourne tjr?