begin process at 2012 05 27 22:10:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > CLASS MYSQL EN PHP 5

CLASS MYSQL EN PHP 5


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Classé sous :class mysql, class mysql-php5, mysql-php5 Niveau :Initié Date de création :27/04/2010 Vu / téléchargé :5 060 / 372

Auteur : devil_may_cry

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

une class de gestion partielle des requêtes de base de mysql select insert , update et delete optimiser pour économiser au maximum le ressource serveur cette class retourne un tableau suite a une requête avec la clause select et l'insert_id suite a la clause insert et true/false dans le cas d'un update alors que le delete utilise une jointure avance avec join qui est plus effeicace que les jointure avec where

Source

  • class MySQL {
  • private $dbHost; //serveur
  • private $dbUser; //utilisateur
  • private $dbPass; //mot de passe
  • private $dbName; //utilisateur
  • private $idConn = NULL; //identifiant de connexion
  • private $result; // reultat de la requete
  • /***
  • * @desc : Constructeur de la classe
  • * @param : none
  • * @return : none
  • */
  • public function __construct($dbhost, $dbuser, $dbpass,$dbname) {
  • $this->dbHost = $dbhost;
  • $this->dbUser = $dbuser;
  • $this->dbPass = $dbpass;
  • $this->dbName = $dbname;
  • }//end __construct()
  • /***
  • * @desc : Connexion à la base de données
  • * @param : none
  • * @return : none
  • */
  • public function connect() {
  • //connexion au serveur mysql
  • $this->idConn = mysql_connect($this->dbHost,$this->dbUser,$this->dbPass);
  • if( !$this->idConn ) {
  • // On lance l'exception
  • } else {
  • // Une connexion est établit on selection notre BD
  • $this->selectDB();
  • }//end if
  • }//end connect()
  • /***
  • * @desc : Selectionne un BD
  • * @param : none
  • * @return : none
  • */
  • public function selectDB() {
  • // Si la BD n'est pas sélectionnée
  • if( !mysql_select_db($this->dbName,$this->idConn) ) {
  • // On lance une exception
  • }//end if
  • }//end selectDB()
  • /***
  • * @desc : Execute une requête SQL
  • * @param : String SQL
  • * @return : Array hash de resultat de requête select/Bool
  • */
  • public function query($sql) {
  • // Verifier s'il y'a une connexion établie à un serveur
  • if( $this->idConn == NULL) {
  • //On lance une exception il doit y avoir une connexion établie au préalable
  • }
  • // Securité
  • if( is_string($sql) ) {
  • if( !$this->result = mysql_query($sql,$this->idConn) ) {
  • // On lance une exception
  • return false;
  • } else {
  • // On test si c'est une requête de Selection
  • if( stristr(strtoupper($sql), 'SELECT') == true ) {
  • $i = 0;
  • // On construit notre $resArray
  • while( $row = mysql_fetch_assoc($this->result) ) {
  • $resArray[$i] = $row;
  • ++$i;
  • }//end while
  • // On libere la ressource
  • mysql_free_result($this->result);
  • return $resArray;
  • } else {
  • // c'est n'est pas une requete SELECT
  • // on informe juste que c'est bien passer
  • return true;
  • }//end if/else 2
  • }//end if/else 1
  • } else {
  • // On lance une exception la requete doit etre une chaine
  • return false;
  • }
  • }//end query()
  • /***
  • * @desc : Insere des données dans une table;
  • * @param : String table, Array fieldArray
  • * @return : Bool
  • */
  • public function insert ($table,$fieldArray){
  • // Formulation de la requête SQL partie 1 : insert into table
  • $sql = 'INSERT INTO `'.$table.'`';
  • // Récuperation des clés du tableau $fieldArray qui vont representer les champs
  • $fieldsName = array_keys($fieldArray);
  • // Implosion du tableau fieldsName
  • // Partie : 2 insert into table(`champ1`,`champ2`,...,`champN`)
  • $sql .= '(`'.implode('`,`',$fieldsName).'`) ';
  • // Formulation de la requête SQL
  • // Partie 3-1 : insert into table(`champ1`,`champN`)values (
  • $sql .= 'VALUES (';
  • // Récupération des valeurs du tableau qui vont representer les valeurs des champs
  • $fieldsValue = array_values($fieldArray);
  • // Reconstitution du tableau sous la forme 'val1','val2','valN'
  • foreach( $fieldsValue as $v ) {
  • if( strcmp($v,"NULL") == 0 ) {
  • $tampon[] = 'NULL';
  • } else {
  • $tampon[] = "'".$v."'";
  • }//end if/else
  • }//end foreach
  • // Formulation de la requête
  • // Partie 3-2 insert into table(`champ1`,`champN`)values(`champ1`,`champN`)
  • $sql .= implode(",",$tampon).")";
  • // Si tous c'est bien passer on retourne le dernier id inserer
  • if ( $this->query($sql) ) {
  • return mysql_insert_id($this->idConn);
  • } else {
  • // On lance une exception
  • return false;
  • }
  • }//end insert()
  • /***
  • * @desc : MAJ des données dans une table
  • * @param : String table, Array fieldArray, String where
  • * @return : Bool
  • */
  • public function update($table,$fieldArray,$where){
  • // Contrôler l'existance de la clause where pour eviter une Maj de toutes les données
  • if( !empty ($where) ) {
  • $sql = 'UPDATE `'.$table.'` SET ';
  • // Recupération des clés du tableau $fieldArray ceux-ci represente le champs
  • $fieldsName = array_keys($fieldArray);
  • // Recupération des valeurs du tableau $fieldArray ceux-ci represente les
  • // valeurs des champs
  • $fieldsValue = array_values($fieldArray);
  • $nbFields = count($fieldsName);
  • // Boucler pour Constituer la requête SQL
  • for( $i = 0; $i < $nbFields; ++$i ) {
  • $k = $fieldsName[$i];
  • $v = $fieldsValue[$i];
  • // Si l'une des valeur est Null
  • if( strcmp($v,'NULL') == 0 ) {
  • // On reconstitue la requête avec la valeur du champs null en vue de debogage
  • $sql .= $k. '= NULL';
  • break;
  • } else {
  • $sql .= '`'.$k.'`'. "='".$v."'";
  • $sql .= ( ($i == count($fieldsName) - 1)?'':' , ');
  • }//end if/else
  • $sql .= ' WHERE '.$where;
  • if ( !$this->query($sql) ) {
  • // On lance une exception
  • return FALSE;
  • } else {
  • return TRUE;
  • }
  • }//end for
  • }//end if
  • }//end update()
  • /***
  • * @desc : Supprime des données d'une ou plusieurs table
  • * @param : String table || Array table, String innerOrLeft, String attrib ,String where
  • * @return : int nbaffectedrows
  • */
  • public function delete($table,$innerOrLeft,$attrib,$where) {
  • // Eviter un delete global donc tester l'existance de la cluase WHERE
  • if( !empty( $where ) ) {
  • //verifier s'il s'agit d'un delete d'une table ou plusieur
  • if( is_array ($table) ) {
  • // Il s'agit d'un delete devant s'éffectuer sur plusieurs tables
  • $sql = 'DELETE FROM `'.$table[0].'`';
  • $nbTables = count($table);
  • for( $i = 1; $i < $nbTables ; ++$i ) {
  • $sql .= ' '.(!empty($innerOrLeft)?$innerOrLeft:'INNER').' JOIN `'.$table[$i].'`';
  • }//end for
  • $sql .= ' USING ('.$attrib.') WHERE '.$where;
  • $delValidate = $this->query(sql);
  • } else {
  • $sql = 'DELETE FROM `'.$table.'` WHERE '.$where;
  • $delValidate = $this->query($sql);
  • }
  • if( !$delValidate ) {
  • //on lance une exception
  • return false;
  • } else {
  • return mysql_affected_rows($this->idConn);
  • }//end if/else
  • }//end if
  • }//end delete()
  • /***
  • * @desc : Retourne le nombre de resultat
  • * @param : Mysql ressource result
  • * @return : Int nbresult
  • */
  • public function numRows($result) {
  • return mysql_num_rows($result);
  • }//end numRows()
  • /***
  • * @desc : Destructeur
  • * @param : none
  • * @return : none
  • */
  • public function __destruct() {
  • mysql_close($this->idConn)
  • }//end destruct()
  • }//end MySQL
class MySQL {
   
   private $dbHost; //serveur
   private $dbUser; //utilisateur
   private $dbPass; //mot de passe
   private $dbName; //utilisateur
   private $idConn = NULL; //identifiant de connexion
   private $result; // reultat de la requete
   
  /***
   * @desc   : Constructeur de la classe
   * @param  : none
   * @return : none
   */ 
   public function __construct($dbhost, $dbuser, $dbpass,$dbname) {
     
	
	 
	 $this->dbHost = $dbhost;
	 $this->dbUser = $dbuser;
	 $this->dbPass = $dbpass;
	 $this->dbName = $dbname;
   
   }//end __construct()
   
  /***
   * @desc   : Connexion à la base de données
   * @param  : none
   * @return : none
   */
   public function connect() {
	  
	 //connexion au serveur mysql
	 $this->idConn = mysql_connect($this->dbHost,$this->dbUser,$this->dbPass);
	 
	 if( !$this->idConn ) {
	     // On lance l'exception
	 
	 } else {
	    // Une connexion est établit on selection notre BD
		$this->selectDB();
	 
	 }//end if
   
   }//end connect()
  
  /***
   * @desc   : Selectionne un BD
   * @param  : none
   * @return : none
   */
   public function selectDB() {
   
     // Si la BD n'est pas sélectionnée
	 if( !mysql_select_db($this->dbName,$this->idConn) ) {   
		  
		 // On lance une exception
	  
	 }//end if
	    
   }//end selectDB()
   	 
  /***
   * @desc   : Execute une requête SQL
   * @param  : String SQL
   * @return : Array hash de resultat de requête select/Bool
   */
   public function query($sql) {
   
     // Verifier s'il y'a une connexion établie à un serveur 
	 if( $this->idConn == NULL) {
		  
	     //On lance une exception il doit y avoir une connexion établie au préalable
	 }
     // Securité 
	 if( is_string($sql) ) {
		   
		 if( !$this->result = mysql_query($sql,$this->idConn) ) {
		      
		      // On lance une exception  
		      return false;
			  
		 } else {
		     
			 // On test si c'est une requête de Selection
			 if( stristr(strtoupper($sql), 'SELECT') == true ) {
	             
				 $i = 0;
		         
				 // On construit notre $resArray
				 while( $row = mysql_fetch_assoc($this->result) ) {
				        
						$resArray[$i] = $row;
						
						++$i;
						  
				 }//end while
				 
				 // On libere la ressource
			     mysql_free_result($this->result);
				 
				 return $resArray;
				 
			  } else {
			      // c'est n'est pas une requete SELECT 
				  // on informe juste que c'est bien passer
			      return true;
			  
			  }//end if/else 2
		
		 }//end if/else 1
		 
	 } else {
	      
		 // On lance une exception la requete doit etre une chaine
		 return false; 
	 }	
	 
	 	  	  
   }//end query()
   
  /***
   * @desc   : Insere des données dans une table;
   * @param  : String table, Array fieldArray
   * @return : Bool
   */
   public function insert ($table,$fieldArray){
     
	 // Formulation de la requête SQL partie 1 : insert into table
	 $sql = 'INSERT INTO `'.$table.'`';
	  
	 // Récuperation des clés du tableau $fieldArray qui vont representer les champs
	 $fieldsName = array_keys($fieldArray);
	  
	 // Implosion du tableau fieldsName 
	 // Partie : 2 insert into table(`champ1`,`champ2`,...,`champN`)
	 $sql .= '(`'.implode('`,`',$fieldsName).'`) ';
      
	 // Formulation de la requête SQL 
	 // Partie 3-1 : insert into table(`champ1`,`champN`)values ( 
	 $sql .= 'VALUES (';
	  
	 // Récupération des valeurs du tableau qui vont representer les valeurs des champs
	 $fieldsValue = array_values($fieldArray);
	  
	 // Reconstitution du tableau sous la forme 'val1','val2','valN'
	 foreach( $fieldsValue as $v ) {
	   
	   if( strcmp($v,"NULL") == 0 ) {
		
		   $tampon[] = 'NULL';
	   
	   } else {
		
		   $tampon[] = "'".$v."'";
	   
	   }//end if/else
	  
	 }//end foreach
	  
	 // Formulation de la requête 
	 // Partie 3-2 insert into table(`champ1`,`champN`)values(`champ1`,`champN`)
	 $sql .= implode(",",$tampon).")";
	 
	 // Si tous c'est bien passer on retourne le dernier id inserer
	 if ( $this->query($sql) ) {
	      
		  return mysql_insert_id($this->idConn);
	 
	 } else {
	     
		 // On lance une exception
		 return false;
	 
	 }
	  	  
   }//end insert()

  /***
   * @desc   : MAJ des données dans une table
   * @param  : String table, Array fieldArray, String where
   * @return : Bool
   */
   public function update($table,$fieldArray,$where){
   
     // Contrôler l'existance de la clause where pour eviter une Maj de toutes les données
	 if( !empty ($where) ) {
	     
		 $sql = 'UPDATE `'.$table.'` SET ';
		  
		 // Recupération des clés du tableau $fieldArray ceux-ci represente le champs
		 $fieldsName = array_keys($fieldArray);
		  
		 // Recupération des valeurs du tableau $fieldArray ceux-ci represente les
		 // valeurs des champs
		 $fieldsValue = array_values($fieldArray);
		 
		 $nbFields = count($fieldsName);
		 // Boucler pour Constituer la requête SQL
		 for( $i = 0; $i < $nbFields; ++$i ) {
		 
		      $k = $fieldsName[$i];
			  $v = $fieldsValue[$i];
			   
			  // Si l'une des valeur est Null
			  if( strcmp($v,'NULL') == 0 ) {
				  
				  // On reconstitue la requête avec la valeur du champs null en vue de debogage
				  $sql .= $k. '= NULL';
				  break;
				   
			  } else { 
			   
			      $sql .= '`'.$k.'`'. "='".$v."'";
				  $sql .= ( ($i == count($fieldsName) - 1)?'':' , ');
			   
			  }//end if/else
			   
			  $sql .= ' WHERE '.$where;
			  
			  if ( !$this->query($sql) ) {
			       
				   // On lance une exception     
			      return FALSE;
			  
			  } else {
			      
				  return TRUE;
			    
			  }
			   
	      }//end for
		    
	}//end if
	  
   }//end update()
   
  /***
   * @desc   : Supprime des données d'une ou plusieurs table
   * @param  : String table || Array table, String innerOrLeft, String attrib ,String where
   * @return : int nbaffectedrows
   */
   public function delete($table,$innerOrLeft,$attrib,$where) {
      
	 // Eviter un delete global donc tester l'existance de la cluase WHERE
	 if( !empty( $where ) )  {
	      
		 //verifier s'il s'agit d'un delete d'une table ou plusieur
		 if( is_array ($table) ) {
		     
			 // Il s'agit d'un delete devant s'éffectuer sur plusieurs tables
			 $sql = 'DELETE FROM `'.$table[0].'`';
			 
			 $nbTables = count($table);
			      
			 for( $i = 1; $i < $nbTables ; ++$i ) {
			      
				  $sql .= ' '.(!empty($innerOrLeft)?$innerOrLeft:'INNER').' JOIN `'.$table[$i].'`';  
			 }//end for
			      
			 $sql .= ' USING ('.$attrib.') WHERE '.$where;
			 
			 $delValidate = $this->query(sql);
		     
		      
		 } else {
	         
			 $sql = 'DELETE FROM `'.$table.'` WHERE '.$where;
			 
			 $delValidate = $this->query($sql);
	     
		 }
		 
		 if( !$delValidate ) {
			 
			     //on lance une exception
				 return false;
			 
		 } else {
			 
			  return mysql_affected_rows($this->idConn);
			 
	     }//end if/else
	  
	 }//end if
   
   }//end delete() 
         
  /***
   * @desc   : Retourne le nombre de resultat
   * @param  : Mysql ressource result
   * @return : Int nbresult
   */
   public function numRows($result) {
   
     return mysql_num_rows($result);
   
   }//end numRows()
   
   /***
   * @desc   : Destructeur
   * @param  : none
   * @return : none
   */
   public function __destruct() {
   
     mysql_close($this->idConn)
   
   }//end destruct()
   
 }//end MySQL
 

 Conclusion

cette class n'est qu'a son tous début dans cette version j'ai juste voulue mettre en œuvre une technique de codage simple et performante pour aborder en premier la notion objet en php 5 et en deuxième lieu une manière efficace d'alléger les tache au serveur de BD en optimisant la manière dont la class est codé.
j'ai l'intention dans la prochaine version d'inclure la gestion des exception et ajouter d'autre fonctionnalité en attendant j'espère que cette classe sera d'une utilité a tous
alors vos suggestions et vos remarques sont les bienvenu

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip CLASS MYSQL 5/PHP5 AVEC GESTION DES EXCEPTION ET DES REQUÊTE...

 Sources de la même categorie

Source avec Zip ORM : DAO, ACTIVERECORD ET DBLIST par Reldan
Source avec une capture CET EXTRAIT PERMET D'AJOUTER DANS UN TABLEAU UNE AGRÉGATION ... par Denis007
EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier

 Sources en rapport avec celle ci

Source avec Zip CLASS PHP :: REQUÊTES MYSQL par devgoneti

Commentaires et avis

Commentaire de Morphinof le 27/04/2010 21:33:25

Je te conseillerai plutot une approche singleton pour une abstraction de base de donnee c'est plus propre a mon avis, ca te permettrai de passer toutes tes fonctions en statiques et de ne pas avoir a instancier ta classe (je pense a un appel du style : MySQL::maFonction() qui est telement plus pratique ^^)
Un point embettant c'est de devoir reinstancier ta classe si on veux fermer la connection a la base car tu la close dans ton destructeur !
Ca m'a pas l'air pratique comme procede.
Si tu veux un exemple d'abstraction avec un singleton : http://files.codes-sources.com/fichier.aspx?id=51656&f=inc%2fclass%2fDBA.php
Sinon le code est propre et agreable a lire :)

Commentaire de devil_may_cry le 28/04/2010 03:23:48

salut
merci pour tes suggestions j'en tiendra compte et je jeterai un coup d'oeil a ton lien
merci encore une fois

Commentaire de thnzr le 03/05/2010 12:48:51

Hello,

+1 pour le Singleton, c'est beaucoup plus pratique.
Et puis aussi utiliser PDO (à partir de PHP5 et +), ce qui permettrai de pouvoir utiliser différentes BDD (oracle, sqlite, ...) en plus de MySQL

Commentaire de knostra le 22/05/2010 18:01:32 10/10

merci pour ton travail.

Commentaire de ahmedtomi le 28/06/2010 16:00:48 10/10

merci bien

Commentaire de sof34 le 27/08/2010 16:27:18

Bonjour,

Merci pour cette classe.
Si c'est pas trop demandé, est-ce qu'on pourrais avoir un exemple d'utilisation pour les noobs dans mon genre svp ? :p

Commentaire de sof34 le 27/08/2010 16:32:03

Oops en voulant tester j'ai une erreur :
Parse error: parse error in C:\Users\siteweb\class\mysql.class.php on line 311

Commentaire de devil_may_cry le 28/08/2010 08:10:55

slt, voila pour l'exemple
// on creer une instance
$db = new MySQL('localhost','root', '','mybase');
// connexion au serveur
$db->connect();
//execution d'une requete
$resultat = $db->query("SELECT * FROM ma_table");
// les enregistrement sont renvoyer dans un tableau associatif avec le nom des champs comme cles
for($i = 0; $i < count($resultat); ++$i) {
    echo $resultat[$i]['nom_champs'];
}
// Insertion d'un nouveau enregistrement
$db->insert ('ma_table',array('nom_champs1'=>$valeur_champs1','nom_champs2'=>$valeur_champs2'))

// Mise ajour
$db->update('ma_table',array('nom_champs1'=>$valeur_champs1','nom_champs2'=>$valeur_champs2'),"champs='valeur'");

// Suppression
$db->delete('ma_table','INNER','clef',"champs='valeur'");

bon voila j'espere que sa va t'aider pour l'erreur que t'a signaler il s'agit d'erreur syntaxique verifie bien s'il y'a pas une accolade manquante a la ligne 311

CORDIALEMENT

Commentaire de castader le 30/08/2011 22:33:46

c est dommage de mettre du code qui "compile" même pas!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales