Class mysql en php 5

Soyez le premier à donner votre avis sur cette source.

Vue 8 551 fois - Téléchargée 712 fois

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 / Exemple :


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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
30 août 2011

c est dommage de mettre du code qui "compile" même pas!
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
16
Date d'inscription
vendredi 6 décembre 2002
Statut
Membre
Dernière intervention
2 septembre 2010
1
Oops en voulant tester j'ai une erreur :
Parse error: parse error in C:\Users\siteweb\class\mysql.class.php on line 311
Messages postés
16
Date d'inscription
vendredi 6 décembre 2002
Statut
Membre
Dernière intervention
2 septembre 2010
1
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
Messages postés
3
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
28 juin 2010

merci bien
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.