19-02-2010, 05:48 PM
(Modification du message : 19-02-2010, 05:51 PM par christouphe.)
il faut redéfinir toutes les méthodes PDO, car pour m'éviter cela, j'avais fait un héritage, ça me semblait logique.
Code PHP :
<?php
class database extends PDO {
private $_connexion; //La connexion à la base de données
private $_result; //La ressource issue de la requête SQL
private $_resultats; // la liste du/des résultat(s) de requête(s)
private $_dbDns = "DNS";
private $_dbUser = "USER";
private $_dbPassword = "PASS";
/*
* Constructeur de l'objet "vide" afin de pouvoir le paramétrer
*/
public function __construct() {
}
/*
* Méthode de destruction d'objet
*/
public function __destruct() {
}
public function __get($name) {
if (isset($this -> $name)) {
return $this -> $name;
} else {
throw new Exception(get_class($this).": L'attribut ".$name." n'existe pas.");
}
}
public function __set($name,$value) {
if (isset($this -> $name)) {
$this -> $name = $value;
} else {
throw new Exception(get_class($this).": L'attribut ".$name." n'existe pas.");
}
}
/*
* Méthode ouvrant la connexion ou une exception PDO si une erreur survient
*/
public function getConnexion() {
$this -> _connexion = new PDO($this -> _dbDns,$this -> _dbUser,$this -> _dbPassword);
$this -> _connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function closeConnexion() {
//
}
/*
* Méthode de traitement des requêtes formulées par l'application.
* @param $_req - array/string - la/les requête(s) à traiter
* @param $_select - boolean - une sélection ou non
*/
public function envoieRequete($_req,$_select=true,$prepare=false,array $data=array()) {
if (!is_array($_req)) {
$temp = $_req;
$_req = array($temp);
}
if ($_select) {
foreach ($_req AS $requete) {
if (!($this -> _result = $this -> _connexion -> prepare($requete))) {
//ERREUR
throw new PDOException(get_class($this).": ERREUR preparation requete: ".$requete);
} else {
if ($this -> _result -> execute()) {
$this -> _resultats = $this -> _result -> fetchAll();
}
}
}
} else {
//UPDATE/INSERT/DELETE
try {
$this -> _connexion -> beginTransaction();
if ($prepare) {
//requete préparée
foreach ($_req AS $requete) {
$stmt = $this -> _connexion -> prepare($requete);
$stmt -> execute($data);
}
} else {
foreach ($_req AS $requete) {
$this -> _connexion -> exec($requete);
}
}
$this -> _connexion -> commit();
} catch (PDOException $pdoE) {
$this -> _connexion -> rollback();
debug($pdoE -> getMessage());debug($pdoE->getCode());
throw new PDOException($pdoE -> getMessage(),$pdoE->getCode());
}
}
}
?>