Les bases avec PDO

La base de données

Les exemples qui vont suivre s'appuient sur la base de données "test" et la table "tab1" ayant les champs suivants:

bdd exemple

Connexion à une base de données en PDO

 MySql

Pour installer MySql voir ici

try{$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '*******');}
catch (Exeption $e) {die('Erreur : ' . $e->getMessage());}

Sqlite

Pour installer sqlite3: apt-get install php5-sqlite ou apt-get install php7.0-sqlite selon votre version de Php

try{$bdd = new PDO('sqlite:db/base.db');}
catch (Exeption $e) {die('Erreur : ' . $e->getMessage());}

Le répertoire "db" doit avoir les droits en écriture!

Postgresql

Pour installer Postgresql voir ici

try{$bdd = new PDO('pgsql:host=localhost;dbname=test', 'root', '*******');}
catch (Exeption $e) {die('Erreur : ' . $e->getMessage());}

Query pour interroger

$reponse = $bdd->query('SELECT * FROM tab1') or die(print_r($bdd->errorInfo()));
while ($donnees = $reponse->fetch())
{
    echo $donnees['id'];
    echo '<br />';
    echo $donnees['nbr'];
    echo '<br />';
    echo $donnees['titre'];
    echo '<br />';
    // ...
}
$reponse->closeCursor();

Exec pour ajouter et modifier

Ajouter

 $bdd->exec('INSERT INTO tab1(nbr, titre, texte, date) VALUES("77","titre7","texte7","2013-07-07")');

Modifier

 $bdd->exec('UPDATE tab1 SET date="2013-06-07" WHERE id=7');

Requête préparée

Marqueur non nommé

$n = 40;

$req = $bdd->prepare('SELECT * FROM tab1 WHERE nbr > ?');
$req->execute(array($n)) or die(print_r($req->errorInfo()));

while ($donnees = $req->fetch())
{
    echo $donnees['id'];
    echo '<br />';
    echo $donnees['nbr'];
    echo '<br />';
    echo $donnees['titre'];
    echo '<br />';
}
$req->closeCursor();

La même chose avec plusieurs variables

$n = 40;
$i = 80;

$req = $bdd->prepare('SELECT * FROM tab1 WHERE nbr > ? AND nbr < ?');
$req->execute(array($n,$i)) or die(print_r($req->errorInfo()));

L'ordre dans le quel sont appelées les variables doit correspondre à l'ordre dans le quel les marqueurs sont appelés dans la requête Sql.

Marqueurs nominatifs

La même chose que ci-dessus mais avec des marqueurs nominatifs

$n = 40;
$i = 80;

$req = $bdd->prepare('SELECT * FROM tab1 WHERE nbr > :nombre_min AND nbr < :nombre_max');
$req->execute(array('nombre_max'=>$i, 'nombre_min'=>$n)) or die(print_r($req->errorInfo()));

On remarquera que cette fois ci, l'ordre dans le quel on à appelé les variables n'a plus d'importance.

Remarque
Dans tous les cas c'est un tableau qui est créé par la méthode "execute()", on peut donc déclarer ce tableau directement et l'insérer dans la méthode

$n = 40;
$i = 80;
$tab = array('nombre_min'=>$n, 'nombre_max'=>$i);
$req = $bdd->prepare('SELECT * FROM tab1 WHERE nbr > :nombre_min AND nbr < :nombre_max');
$req->execute($tab) or die(print_r($req->errorInfo()));

Ajouter une entrée

$entrees = array(
        'nombre'=>88,
        'titre'=>'titre8',
        'texte'=>'texte8',
        'date'=>'2013-08-08',
    );

$req = $bdd->prepare('INSERT INTO tab1(nbr,titre,texte,date) VALUES(:nombre, :titre, :texte, :date)');
$req->execute($entrees) or die(print_r($req->errorInfo()));

$req->closeCursor();

Modifier une entrée

$entrees = array( 
        'identifiant'=>9,
        'newdate'=>'2013-10-10',
);

$req = $bdd->prepare('UPDATE tab1 SET date = :newdate WHERE id = :identifiant');
$req->execute($entrees) or die(print_r($req->errorInfo()));

$req->closeCursor();

Supprimer une entrée

$req = $bdd->prepare('DELETE FROM tab1 WHERE id = :identifiant');
$req->execute(array('identifiant'=>9)) or die(print_r($req->errorInfo()));

$req->closeCursor();

/!\ ATTENTION: sans la présence de "WHERE" c'est toute la table qui sera vidée!

^