Comme l'on est en droit de l'attendre, utiliser PDO permet de se connecter à différentes bases de données avec une même fonction, en ne modifiant que certains arguments :
// SQLite
new PDO(sqlite:/chemin/vers/fichier_de_donnees');
// MySQL
new PDO(mysql:host=localhost;dbname=basededonnees', identifiant, motdepasse);
// PostgreSQL
new PDO(pgsql:host=localhost port=5432 dbname=basededonnees user=identifiant password=motdepasse');
De fait, il devient possible de prévoir l'accès à plusieurs sources de données.
$dbid = 'identifiant';
$dbmdp = 'motdepasse';
$db = 'mysql:host=localhost;dbname=basededonnees';
try {
$cnx = new PDO($db, $dbid, $dbmdp);
}
catch (PDOException $dbex) {
die("Erreur de connexion : " . $dbex->getMessage() );
}
On pourra également leur assigner un nom, ou DSN (Data Source Name).
ini_set("pdn.dsn.mabase", "mysql:host=localhost;dbname=basededonnees', identifiant, motdepasse");
try {
$cnx = new PDO("mabase");
}
catch (PDOException $dbex) {
die("Erreur de connexion : " . $dbex->getMessage() );
}
PDO s'utilise ensuite par le biais des méthodes de ses classes, dont les noms sont évocateurs : commit() , query() , exec() , fectch() , fetchColumn() , rowCount() , getInsertId() , rollBack() ...
Une fois connecté à la base, ces méthodes sont accessibles pour toutes les requêtes habituelles :
$req = "INSERT INTO produits (nom, prix, exemplaires) VALUES ('Un lapin rose', 42, 210477)";
$cnx->exec($req);
$last_id = $cnx->lastInsertId();
$req = "SELECT * FROM produits";
$res = $cnx->query($req);
if ($res != FALSE) {
echo "Nous avons dans notre catalogue :<br/><ul>";
while ($row = $res->fetch()) {
echo "<li>$row->exemplaires $row->nom a $row->prix euros pièces</li>";
}
echo "</ul>";
}
$cnx = NULL;
Les méthodes exec() et query() sont les plus utilisées. query() est à utiliser dans le cas où la requête doit renvoyer des informations. Les deux renvoient FALSE en cas d'erreur. |