Accueil > > > CLASS MYSQL EN PHP 5
CLASS MYSQL EN PHP 5
Information sur la source
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
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
GOOGLE MAPGOOGLE MAP par fatmanajjar
Cliquez pour lire la suite par fatmanajjar
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|