* @copyright (C)2009 Xavier Derrey * @version 1.0 * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE */ class kare_mysql { /** * host * @var str */ protected $host = 'MET_TON_HOST_ICI'; /** * login * @var str */ protected $user = 'MET_TON_USER_ICI'; /** * mot de passe * @var str */ protected $password = 'MET_TON_PASS_ICI'; /** * nom de la base * @var str */ protected $db_name = 'MET_LE_NOM_DE_TA_BASE_ICI'; /** * identifiant de connexion * @var int */ protected $conx_id; /** * tableau des requetes * @var array>ressources */ protected $tab_requete = array(); /** * dernier identifiant généré * @var int */ protected $lastid; /** * Constructeur * @param str $host host * @param str $user login * @param str $pass mot de passe * @param str $dbname nom de la base * @return ressource instance en cours */ function __construct($host='',$user='',$pass='',$db_name='') { //on applique les parametres if($host != '') { $this->host = $host; } if($usert != '') { $this->user = $user; } if($pass != '') { $this->password = $pass; } if($db_name != '') { $this->db_name = $db_name; } //on retourne l'instance en cours return $this; } /** * crée un identifiant de requete unique * @return int identifiant uniqiue */ protected function make_id() { //creation d'un id random $id = mt_rand(); //s'il existe deja ou 0 on recrée while(isset($this->tab_requete[$id]) || $id == 0) { $id = mt_rand(); } //on log le dernier id $this->lastid = $id; //on renvoi l'id créé return $id; } /** * Connexion à la base * @return bool vrai si ok faux si nok */ protected function connect() { //si on est deja connecté on ne fait rien if($this->conx_id) { return true; } //on lance la connexion if (!$this->conx_id=@mysql_connect($this->host,$this->user,$this->password,true)) { throw new Exception('Connexion à la base de données impossible.'); return false; } //on selectionne la base if(!mysql_select_db($this->db_name)) { throw new Exception('Selection de la base de données impossible.'); return false; } //on retourne true si OK return true; } /** * Envoi une requete à la base * @param str $sql requete à envoyer * @return int identifiant de la requete (ou faux si on a une erreur) */ function requete($sql) { //creation d'un identifiant $id = $this->make_id(); //connexion si necessaire if(!$this->connect()) { return false; } //on lance la requete if(!$this->tab_requete[$id] = @mysql_query($sql,$this->conx_id)) { //si impossible on envoi une exception avec la requete et le message d'erreur mysql throw new Exception('Requete "'.$sql.'" impossible: '.mysql_error()); //et on renvoi faux return false; } //si ok on renvoi l'identifiant return $id; } /** * Parcours la prochaine ligne de resultat sous la forme d'un objet * @param int $id identifiant de la requete à parcourir * @return ressourse ou false si fin de recordset */ function fetch_object($id = 0) { //si pas d'idi renseigné on prend le dernier if($id == 0) { $id = $this->lastid; } // si on a un resultat on le renvoi sinon on libere la requete et on renvoi false if($res = mysql_fetch_object($this->tab_requete[$id])) { return $res; } else { $this->free($id); return false; } } /** * Parcours la prochaine ligne de resultat sous la forme d'un tableau indexé * @param int $id identifiant de la requete à parcourir * @return ressourse ou false si fin de recordset */ function fetch_row($id = 0) { //si pas d'idi renseigné on prend le dernier if($id == 0) { $id = $this->lastid; } // si on a un resultat on le renvoi sinon on libere la requete et on renvoi false if($res = mysql_fetch_row($this->tab_requete[$id])) { return $res; } else { $this->free($id); return false; } } /** * Renvoi le nombre de lignes renvoyées par une requete * @param int $id identifiant de la requete à parcourir * @return int nb de lignes */ function nb_ligne($id = 0) { //si pas d'idi renseigné on prend le dernier if($id == 0) { $id = $this->lastid; } //on renvoi le nombre de ligne de la requete return @mysql_num_rows($this->tab_requete[$id]); } /** * Teste si une requete renvoi au moins une ligne * @param str $sql requete à tester * @return bool vrai si au moins une ligne, faux sinon */ function sqlexiste($sql) { //on execute la requete $id = $this->requete($sql); //on recupere le nombre de lignes $nb = $this->nb_ligne($id); //on libere la requete $this->free($id); //on renvoi le resultat return $nb; } /** * Envoie à la base une requete ne renvoyant qu'un resultat (une ligne, un champ) * et renvoi le resultat trouvé * @param str $sql requete a envoyer * @return mixed resultat renvoyé par la requete */ function sqlunique($sql) { //on execute la requete $id = $this->requete($sql); //on fetch row et on recupere le seul résultat $res = $this->fetch_row($id); //on libere la requete $this->free($id); //on renvoi le resultat return $res[0]; } /** * Envoie à la base une requete ne renvoyant qu'une ligne * et renvoi la ligne sous forme d'un objet * @param str $sql requete a envoyer * @return ressource ou false si on a pas de resultat */ function sqlunique_object($sql) { //on execute la requete $id = $this->requete($sql); //on fetch object et on recupere la seule ligne $res = $this->fetch_object($id); //on libere la requete $this->free($id); //on renvoi le resultat return $res; } /** * Deconnecte de la base * @return ressource instance courrante */ function deconnect() { //on ne deconnecte que si on a une connexion active if($this->conx_id) { mysql_close($this->conx_id); } //on detruit l'identifiant de connexion unset($this->conx_id); //on renvoi l'instance en cours return $this; } /** * libere une requete * @param int $id identifiant de la requete a liberer * @return ressource instance courrante */ function free($id) { //on detruit la requete specifiée unset($this->tab_requete[$id]); //on renvoi l'instance en cours return $this; } /** * libere toutes les requetes * @return ressource instance courrante */ function free_all() { //on vide toutes les ressources foreach($this->tab_requete as $key => $val) { unset($this->tab_requete[$key]); } //on renvoi l'instance en cours return $this; } }