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
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.