2,7 → 2,7 |
// declare(encoding='UTF-8'); |
/** |
* Classe Bdd, d'accés au base de données. |
* Elle fait office d'abstraction légère de base de données en utilisant diverses possibilités d'accès aux |
* Elle fait office d'abstraction légère de base de données en utilisant diverses possibilités d'accès aux |
* bases de données (PDO, mysql, mysqli, SQLite3). |
* Les valeurs pour le paramètre 'bdd_abstraction' du fichier config.ini sont : pdo, mysql, mysqli, sqlite3 |
* Vous pouvez aussi utiliser : "php:Bdd::ABSTRACTION_PDO","php:Bdd::ABSTRACTION_MYSQL", "php:Bdd::ABSTRACTION_MYSQLI", |
23,68 → 23,68 |
class Bdd { |
/** Constante stockant le squelette du message en cas d'erreur de requête sql. */ |
const ERREUR_REQUETE_TPL = 'Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s'; |
|
|
/** Constante stockant le squelette du message en cas d'erreur de connexion à la base de données. */ |
const ERREUR_CONNEXION_TPL = 'Erreur de connexion à la base de données, vérifiez les paramètres du fichier de configuration.\nMessage : %S.'; |
|
|
/** Constante stockant le squelette du message en cas d'erreur de sélection de la base de données. */ |
const ERREUR_SELECTION_BDD_TPL = 'Erreur de sélection de la base de données, vérifiez les paramètres du fichier de configuration.\nMessage : %S.'; |
|
|
/** Constante stockant le code pour l'abstraction de PDO. */ |
const ABSTRACTION_PDO = 'pdo'; |
|
|
/** Constante stockant le code pour l'abstraction de mysql. */ |
const ABSTRACTION_MYSQL = 'mysql'; |
|
|
/** Constante stockant le code pour l'abstraction de mysqli. */ |
const ABSTRACTION_MYSQLI = 'mysqli'; |
|
|
/** Constante stockant le code pour l'abstraction de SQLite3. */ |
const ABSTRACTION_SQLITE3 = 'sqlite3'; |
|
|
/** Constante stockant le code pour le mode tableau associatif des résultats des requêtes. */ |
const MODE_ASSOC = 'ASSOC'; |
|
|
/** Constante stockant le code pour le mode objet des résultats des requêtes. */ |
const MODE_OBJET = 'OBJECT'; |
|
|
/** Mode de fetch associatif */ |
protected $ASSOC = ''; |
|
|
/** Mode de fetch objet */ |
protected $OBJECT = ''; |
|
/** abstraction de base de données utilisée */ |
protected $abstraction; |
|
|
/** DSN pour accéder à la base de données */ |
protected $dsn; |
|
|
/** Type de base de données (mysql, mysqli, etc ...) */ |
protected $type; |
|
|
/** Hote herbergeant la base de données */ |
protected $hote; |
|
|
/** Nom de la base de données à laquelle le modèle doit se connecter */ |
protected $bdd_nom; |
|
|
/** Nom d'utilisateur */ |
protected $utilisateur; |
|
|
/** Mot de passe */ |
protected $pass; |
|
/** Encodage de la base de données */ |
protected $encodage = null; |
|
|
/** Connexion à la base de données */ |
protected $connexion = null; |
|
/** Tableau des noms des paramètres à définir dans le fichier de config car obligatoirement nécessaire à cette classe.*/ |
protected $parametres_obligatoires = array('bdd_abstraction', 'bdd_protocole', 'bdd_serveur', 'bdd_nom', |
protected $parametres_obligatoires = array('bdd_abstraction', 'bdd_protocole', 'bdd_serveur', 'bdd_nom', |
'bdd_utilisateur', 'bdd_mot_de_passe', 'bdd_encodage'); |
|
|
/** Constructeur par défaut, appelé à l'initialisation. */ |
public function __construct() { |
Config::verifierPresenceParametres($this->parametres_obligatoires); |
96,7 → 96,11 |
$this->pass = Config::get('bdd_mot_de_passe'); |
$this->encodage = Config::get('bdd_encodage'); |
|
$this->dsn = $this->type.':dbname='.$this->bdd_nom.';host='.$this->hote; |
if ($this->type == 'sqlite' || $this->type == 'sqlite2') { |
$this->dsn = $this->type.':'.$this->hote; |
} else { |
$this->dsn = $this->type.':dbname='.$this->bdd_nom.';host='.$this->hote; |
} |
$this->initialiserProtocole(); |
} |
|
124,7 → 128,7 |
trigger_error($m, E_USER_WARNING); |
} |
} |
|
|
/** |
* Connection à la base de données en utilisant les informations fournies par |
* le fichier de configuration. |
141,6 → 145,11 |
$e = sprintf(self::ERREUR_CONNEXION_TPL, $e->getMessage()); |
trigger_error($e, E_USER_WARNING); |
} |
if ($this->encodage != null && $this->type == 'mysql') { |
$this->requeter("SET names '".$this->encodage."'"); |
} else if ($this->type == 'sqlite') { |
$this->requeter("PRAGMA case_sensitive_like = false"); |
} |
break; |
case self::ABSTRACTION_MYSQL : |
$this->connexion = mysql_connect($this->hote, $this->utilisateur, $this->pass); |
154,6 → 163,9 |
$e = sprintf(self::ERREUR_CONNEXION_TPL, mysql_error()); |
trigger_error($e, E_USER_WARNING); |
} |
if ($this->encodage != null) { |
$this->requeter("SET names '".$this->encodage."'"); |
} |
break; |
case self::ABSTRACTION_MYSQLI : |
$this->connexion = @new mysqli($this->hote, $this->utilisateur, $this->pass, $this->bdd_nom); |
161,6 → 173,9 |
$e = sprintf(self::ERREUR_CONNEXION_TPL, $this->connexion->connect_error); |
trigger_error($e, E_USER_WARNING); |
} |
if ($this->encodage != null) { |
$this->requeter("SET names '".$this->encodage."'"); |
} |
break; |
case self::ABSTRACTION_SQLITE3 : |
// cas particulier de sqllite, on considère que le nom de la base de données correspond au fichier à ouvrir |
169,17 → 184,14 |
$e = sprintf(self::ERREUR_CONNEXION_TPL, ''); |
trigger_error($e, E_USER_WARNING); |
} |
$this->requeter("PRAGMA case_sensitive_like = false"); |
break; |
default: |
$this->connexion = null; |
} |
|
if ($this->encodage != null) { |
$this->requete("SET names '".$this->encodage."'"); |
} |
} |
} |
|
|
/** |
* @deprecated changement de nom. Disparaîtra dans la version 0.4. Utiliser à la place : @see requeter |
*/ |
186,7 → 198,7 |
final protected function requete($requete) { |
return $this->requeter($requete); |
} |
|
|
/** |
* Execute une requête et retourne le résultat tel que renvoyé par l'abstraction courante. |
* |
218,7 → 230,7 |
} |
return $retour; |
} |
|
|
/** |
* @deprecated changement de nom. Disparaîtra dans la version 0.4. Utiliser à la place : @see recuperer |
*/ |
225,7 → 237,7 |
final protected function requeteUn($requete, $mode = self::MODE_ASSOC) { |
return $this->recuperer($requete, $mode); |
} |
|
|
/** |
* Execute une requête et retourne le premier résultat sous forme de tableau (par défaut) ou d'objet. |
* Les noms des champs de la base de données correspondent aux noms des clés du tableau ou aux noms des attributs de l'objet. |
264,7 → 276,7 |
} |
return $retour; |
} |
|
|
/** |
* @deprecated changement de nom. Disparaîtra dans la version 0.4. Utiliser à la place : @see recupererTous |
*/ |
271,11 → 283,11 |
final protected function requeteTous($requete, $mode = self::MODE_ASSOC) { |
return $this->recupererTous($requete, $mode); |
} |
|
|
/** |
* Execute une requête et retourne un tableau de résultats. Un résultat peut être présentés sous forme |
* Execute une requête et retourne un tableau de résultats. Un résultat peut être présentés sous forme |
* de tableau (par défaut) ou d'objet. |
* Les noms des champs de la base de données correspondent aux noms des clés du tableau résultat ou |
* Les noms des champs de la base de données correspondent aux noms des clés du tableau résultat ou |
* aux noms des attributs de l'objet résultat. |
* |
* @param string la requête à effectuer |
284,7 → 296,7 |
*/ |
public function recupererTous($requete, $mode = self::MODE_ASSOC) { |
$this->connecter(); |
|
|
$retour = null; |
switch ($this->abstraction) { |
case self::ABSTRACTION_PDO : |
359,9 → 371,9 |
* le cas de PDO, du driver utilisé. Les méthodes utilisées pour retourner l'identifiant peuvent avoir des comportements |
* différent. Consulter la documentation PHP correspondant à l'abstraction choisie avant de l'utiliser : |
* @link(http://fr.php.net/manual/fr/pdo.lastinsertid.php, PDO::lastInsertId([ string $name = NULL ])) |
* @link(http://php.net/manual/en/mysqli.insert-id.php, mysqli->insert_id()) |
* @link(http://php.net/manual/en/mysqli.insert-id.php, mysqli->insert_id()) |
* @link(http://fr.php.net/manual/fr/function.mysql-insert-id.php, mysql_insert_id()) |
* @link(http://fr.php.net/manual/fr/sqlite3.lastinsertrowid.php, SQLite3::lastInsertRowID()) |
* @link(http://fr.php.net/manual/fr/sqlite3.lastinsertrowid.php, SQLite3::lastInsertRowID()) |
* @param mixed un paramètre éventuel à transmettre (en fonction de l'abstraction de BDD utilisée). |
* @return mixed le dernier identifiant de clé primaire ajouté dans la base de données (string ou int). |
*/ |
385,7 → 397,7 |
} |
return $retour; |
} |
|
|
/** |
* Destructeur de classe, se contente de fermer explicitement la connexion à la base de donnée. |
*/ |
398,7 → 410,7 |
case self::ABSTRACTION_MYSQL : |
if (isset($this->connexion)) { |
return mysql_close($this->connexion); |
} |
} |
break; |
case self::ABSTRACTION_MYSQLI : |
$this->connexion->close(); |