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

Sélectionner des données 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 rapide 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.

Commentaires

dotnet le 05/12/2011
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.
xnadyx le 17/04/2012
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.

Ajouter un commentaire

A lire aussi

Résumé de la rubrique
Catégorie
php5 / db / pdo
Mise a jour
20/09/2011
Visualisation
vu 1551 fois
Public
Internaute zz
Auteur de la publication
Fobec
Fobec
Partager sur les réseau sociaux