// // ------------------------------------------------------------------------- // /* Cette classe vous permet d'accéder facilement à une base MySQL, et d'ex&cuter des requètes de type INSERT, SELECT, etc.. (avec gestion des commandes LOCK TABLE) et gestion des résultats (fetch_row, fetch_object, etc...) et gestion des erreurs (avec un mode Debug). Tout est automatique : récupération du nombre de ligne touchées, et id d'auto_increment, etc... .------------------------------------------------------------------------------------. | EXEMPLE D'UTILISATION DE LA CLASSE MySQL - Pierre CAILLEUX | |------------------------------------------------------------------------------------. | $SQL = new MySQL() ; | | $SQL->connect() ; pour la base par default ($mysql_db) ou $SQL->connect("mabase) ; | | $SQL->selectDb("mabase") ; pour changer de base | | $SQL->query("ici ma requete SQL") ; | | while($ligne = $SQL->getRow()) print $ligne[0] ; | | $SQL->logOff() ; | | | .------------------------------------------------------------------------------------. | $SQL = new MySQL("toto","tata") ; la connexion se fait directement | | $SQL->selectDb("mabase") ; pour changer de base | | $SQL->query("ici ma requete SQL") ; | | while($ligne = $SQL->getRow()) print $ligne[0] ; | | $SQL->logOff() ; | | | .------------------------------------------------------------------------------------. */ Class MySQL { /* ** Liste des variables ** de connexion à remplacer ** par les votres. */ var $mysql_user = "login" ; /* Login de connexion */ var $mysql_pass = "password" ; /* Password de connexion */ var $mysql_host = "mon_serveur" ; /* Adresse du serveur */ var $mysql_db = "ma_base" ; /* Base de donnée principale */ var $mysql_port = 3306 ; /* Port de connexion à MySQL */ /* ** Liste des variables internes */ var $mysql_connect_id ; /* ID de connexion à MySQL */ var $mysql_resultat ; /* ID de résultat */ var $mysql_num_res ; /* Nombre de lignes retournées */ var $last_id_insert ; /* Dernier Auto-ID inséré */ var $sqlerreurno = 0 ; /* n° de l'erreur mysql */ var $sqlerreurmsg = "" ; /* n° de l'erreur mysql */ var $erreurmsg = "" ; /* message de l'erreur mysql */ var $debug = 0 ; /* Afficher les erreurs */ // ---------------------------------------------------------------------------- /* **** CONSTRUCTEUR AVEC ARGUMENTS MULTIPLES *** **** 1 : login **** 2 : password **** 3 : host **** 4 : database **** 5 : port */ function MySQL() { $numargs = func_num_args(); switch($numargs) { // Sans argument, pas de connexion // (pour pouvoir changer un paramètre spécifique) case 0 : case 1 : break ; // juste pour le style :-) // deux arguments : login et mot de passe case 2 : $this->mysql_user = func_get_arg (0) ; $this->mysql_pass = func_get_arg (1) ; $this->connect() ; break ; // trois arguments : login, password, et adresse du serveur case 3 : $this->mysql_user = func_get_arg (0) ; $this->mysql_pass = func_get_arg (1) ; $this->mysql_host = func_get_arg (2) ; $this->connect() ; break ; // quatre arguments : avec en plus la base de donnée à sélectionner case 4 : $this->mysql_user = func_get_arg (0) ; $this->mysql_pass = func_get_arg (1) ; $this->mysql_host = func_get_arg (2) ; $this->mysql_db = func_get_arg (3) ; $this->connect() ; break ; // Le port en plus case 5 : $this->mysql_user = func_get_arg (0) ; $this->mysql_pass = func_get_arg (1) ; $this->mysql_host = func_get_arg (2) ; $this->mysql_db = func_get_arg (3) ; $this->mysql_port = func_get_arg (4) ; $this->connect() ; break ; } } /* --------------------------------------- ** Fonction de connexion à la base --------------------------------------- */ function connect($db="-") { /** Connexion à MySQL */ $this->erreurno = 0 ; $this->mysql_connect_id = @mysql_pconnect($this->mysql_host.":".$this->mysql_port, $this->mysql_user, $this->mysql_pass) or $this->Erreur("Echec de connexion !") ; if($db!="-") $base = $db ; else $base = $this->mysql_db ; /** Sélection de la base de donnée */ @mysql_select_db($base, $this->mysql_connect_id) or $this->Erreur("Séléction de la base IMPOSSIBLE !!") ; } /* --------------------------------------- ** Fonction de de-connexion à la base --------------------------------------- */ function logOff() { @mysql_close($this->mysql_connect_id) ; } // ---------------------------------------------------------------------------- /* --------------------------------------- ** Selection d'une autre base de donnée --------------------------------------- */ function selectDb($db) { @mysql_select_db($db, $this->mysql_connect_id) or $this->Erreur("Séléction de la base IMPOSSIBLE !!") ; } // ---------------------------------------------------------------------------- /* ---------------------------------- ** Fonction d'éxecution de requètes ---------------------------------- */ function query($query) { /** Exécution de la requète passée en paramètre */ $commande = strtoupper(substr($query, 0, 6)); if($commande == "UNLOCK" || $commande == "LOCK T") { $temp = @mysql_query($query, $this->mysql_connect_id) or $this->Erreur("Exécution de requète IMPOSSIBLE !!") ; } else { $this->mysql_resultat = @mysql_query($query, $this->mysql_connect_id) or $this->Erreur("Exécution de requète IMPOSSIBLE !!") ; } if($this->sqlerreurno != 0) return false ; /** Met à jour le nombre de lignes affectées par la requète envoyée */ if($commande == "SELECT") $this->mysql_num_res = @mysql_num_rows($this->mysql_resultat) ; else $this->mysql_num_res = @mysql_affected_rows($this->mysql_resultat) ; /** En cas d'insertion retourne la valeur du dernier chanmps AUTO_INCREMENT */ if($commande == "INSERT") $this->last_id_insert = @mysql_insert_id($this->mysql_connect_id) ; return true ; } // ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------- ** Execute une requete en verrouillant les tables ** passée en paramètre sous forme de chaine de caractères, ** avec une chaine des droits correspondant R ou W (read ou write) ** les tables et les droits sont séparés par $separateur ( par defaut). ** ATTENTION : toujours DE-verrouiller les tables avec unlockTables() ; ----------------------------------------------------------------------------- */ /* ** Verrouillage des tables uniquement */ function lockTables($tables, $right, $separateur = " ") { if(sizeof($listeTable) != sizeof($listeDroits)) { return false ; } else { $query = "LOCK TABLES " ; for($i=0; $i < sizeof($listeTable); $i++) { if($i != 0) $query .= ", " ; $query .= $listeTable[$i] . " " ; switch(strtoupper($listeDroits[$i])) { case "R" : $query .= "READ" ; break ; case "W" : $query .= "WRITE" ; break ; } } $this->query($query) ; if($this->sqlerreurno != 0 ) return false ; else return true ; } } /* ** Verrouillage des tables et execution de la requete ** puis déverrouillage des tables : utile pour une requete. */ function queryLock($requete, $tables, $right, $separateur = " ") { $listeTable = explode($separateur, $tables) ; $listeDroits = explode($separateur, $right) ; if(sizeof($listeTable) != sizeof($listeDroits)) { return false ; } else { $query = "LOCK TABLES " ; for($i=0; $i < sizeof($listeTable); $i++) { if($i != 0) $query .= ", " ; $query .= $listeTable[$i] . " " ; switch(strtoupper($listeDroits[$i])) { case "R" : $query .= "READ" ; break ; case "W" : $query .= "WRITE" ; break ; } } $ret = $this->query($query) ; if(!$ret) return false ; $ret = $this->query($requete) ; if(!$ret) return false ; $ret = $this->unlockTables() ; if(!$ret) return false ; else return true ; } } /* ** De-verrouillage des tables */ function unlockTables() { $this->query("UNLOCK TABLES") ; } // ---------------------------------------------------------------------------- /* -------------------------------------------------------- ** Retourne une ligne de resultat sous différentes formes -------------------------------------------------------- */ // Tableau à indice numériques : $ligne[0] ; function getRow() { $ligne = mysql_fetch_row($this->mysql_resultat) ; return $ligne ; } // Tableau à indice alphabétique : $ligne["ma_colonne"] ; function getArray() { $ligne = mysql_fetch_array($this->mysql_resultat) ; return $ligne ; } // Objet : $ligne->ma_colonne ; function getObject() { $ligne = mysql_fetch_object($this->mysql_resultat) ; return $ligne ; } // ---------------------------------------------------------------------------- /* ------------------------------ ** Fonction d'erreur ------------------------------ */ function Erreur($error_string) { /* ** Récuperation des messages et n° d'erreurs ** */ $this->sqlerreurno = mysql_errno() ; $this->erreurmsg = $error_string ; $this->sqlerreurmsg = mysql_error() ; /* ** En mode debug, on affiche le message et le n° de ** l'erreur en terminant le script.' if($this->debug == 1) { /* ** On ferme les balises susceptibles ** d'empecher l'affichage du message ** d'erreur. */ print "" ; /* ** On affiche l'erreur. */ print "

Erreur : "; print "$error_string
" ; print mysql_error() . "Erreur n° : " . mysql_errno() ; /* ** On arrete le script. */ die() ; } } // ---------------------------------------------------------------------------- } ?>