Class mysql 5/php5 avec gestion des exception et des requêtes préparés

Description

Tout est dans le titre cette class vous offre la possibilité d'utiliser les requêtes préparés et aussi de choisir le gestionnaire des erreurs par les exceptions ou les erreur standard voici quelques exemples d'utilisation :
// Exemple d'utilisation
// Creation d'une nouvelle instance
$dbcfg['host'] = 'localhost';
$dbcfg['database'] = 'rimzik';
$dbcfg['user'] = 'root';
$dbcfg['password'] = '';
$options = array('ATTR_PERSISTENCY' => true,
'ATTR_ERRMODE' => DATABASE::ERRMODE_EXCEPTION);
// Requete Simple
$db = DATABASE::connect($dbcfg,$options);
try {

// Execution d'une requete SQL
$resultats = $db->Query("SELECT * FROM table");
// Nombre de results de la requete SQL;
$nbresults = $db->rowCount($resultats);
// Recuperation du resultat de la requete
while($row = $db->fetchAssoc($resultats) ) {
//
}
//liberation des ressources
$db->closeCursor($resultats);
//fermeture de la connexion
$db->close();
} catch (Exception $e ) {
echo $e->getMessage();
}
// Requete PREPARE
$db = DATABASE::connect($dbcfg,$options);
try {

// Execution d'une requete SQL
$stmt = $db->prepare("SELECT * FROM tables WHERE id=?");
$resultats = $db->execute(array(1),$stmt);
// Nombre de results de la requete SQL;
$nbresults = $db->rowCount($resultats);
// Recuperation du resultat de la requete
while( $row = $db->fetchObject($resultats) ) {
//
}
//liberation des ressources
$db->closeCursor($resultats);
//fermeture de la connexion
$db->close();
} catch (Exception $e ) {
echo $e->getMessage();
}
$db = DATABASE::connect($dbcfg,$options);
try {

$db->Begin();
// Execution d'une requete SQL
$resultats = $db->Query("INSERT INTO table(champ) values('value')");
//fermeture de la connexion
$db->Commit();
$db->close();
} catch (Exception $e ) {
$db->RollBack();
echo $e->getMessage();
}
// securisé une variable
//utiliser
$var = '<script type="text/javascript">alert("ok")</script>';
$var = $db->quote($var,DATABASE::PARAM_STR); // STRING
$var = $db->quote($var,DATABASE::PARAM_INT); // INTEGER
$var = $db->quote($var,DATABASE::PARAM_FLOAT); // FLOAT
$var = $db->quote($var,DATABASE::PARAM_BOOL); // BOOL
echo $var;
//dans une requête ne l'entourer pas de double quote

Source / Exemple :


<?php
include 'config.php';

class DATABASE {
	// Hote
	private $host = 'localhost';
	// User
	private $user = '';
	// Password
	private $password = '';
	// Databse
	private $database = '';
	// Persistency
	private $persistency = false;
	// Port
	private $port = NULL;
	// Connexion id
	private $connid = NULL;
	
	// Constante pour la methode quote 
	const PARAM_STR = 1; // Cast du type STR;
	const PARAM_INT = 2; // Cast du type INT
	const PARAM_FLOAT = 3; // Cast du FLOAT
	const PARAM_BOOL = 4; // Cast du type BOOL
	
	// Constante pour le type d'eereur
	const ERRMODE_EXCEPTION = 'E_EXCEPTION';
	const ERRMODE_WARNING   = 'E_WARNING';
	// Execetion
	private $exception = true;
	// Instance 
	protected static $instance;
	
   /***

  • - @desc : Constructor
  • - @params : Array $host,$user,$password,$database,$persistency,$port
  • - @return : none
  • /
protected function __construct($params,$options=array()) { $this->host = array_key_exists('host', $params) ? $params['host'] : 'localhost'; $this->user = array_key_exists('user', $params) ? $params['user'] : ''; $this->password = array_key_exists('password',$params) ? $params['password'] : ''; $this->database = array_key_exists('database',$params) ? $params['database'] : ''; $this->port = array_key_exists('port',$params) ? $params['port'] : ''; // Detection du port $this->host = !empty($this->port) ? $this->host.':'.$this->port : $this->host; if( !empty($options) ) { // On cherche le type de handler choisit par l'utilisateur if( array_key_exists('ATTR_ERRMODE', $options) ) { // Gestion des erreurs avec les exceptions disponible seulement avec PHP 5 if( strtoupper($options['ATTR_ERRMODE']) == self::ERRMODE_EXCEPTION ) { if( version_compare(PHP_VERSION, '5.0.0', '<')) { $this->exception = false; trigger_error("La version ".PHP_VERSION." que vous utiliser ne supporte pas les exceptions",E_USER_ERROR); } else { $this->exception = true;; } // Gestion des erreur en mode standard } elseif( strtoupper($options['ATTR_ERRMODE']) == self::ERRMODE_WARNING ) { $this->exception = false; // Le mode de gestion des erreur est inconue } else { trigger_error(__CLASS__.' :: impossible d\'activer le mode de gestion d\'erreur définit',E_USER_ERROR); } // Demande connexion persistente $this->persistency = array_key_exists('ATTR_PERSISTENCY',$options) ? $options['ATTR_PERSISTENCY'] : false; } else { // On définit les Exceptions comme mode d'erreur par default $this->exception = true; } } // Connexion persistente if( ($this->persistency) ) { $this->connid = mysql_pconnect($this->host,$this->user,$this->password); } else { echo 'lon'; $this->connid = @mysql_connect($this->host,$this->user,$this->password); } // Selection de la base de données if( is_resource($this->connid) ) { if( @mysql_select_db($this->database,$this->connid) ) { //activation du support utf-8 mysql_query("SET NAMES 'utf8'", $this->connid); return $this->connid; } else { if( $this->exception ) throw new Exception(mysql_error($this->connid),mysql_errno($this->connid)); else trigger_error(mysql_error($this->connid),E_USER_ERROR); } } else { if( $this->exception ) throw new Exception(mysql_error(),mysql_errno()); else trigger_error(mysql_error(),E_USER_ERROR); } } /***
  • - @desc : Connect
  • - @params : Array $params,Array $options
  • - @return : none
  • /
public static function connect($params,$options) { if (!isset(self::$instance)) { self::$instance = new self($params,$options); } return self::$instance; } /***
  • - @desc : Execute une requête SQL
  • - @params : String $sql
  • - @return : none
  • /
public function Query($sql) { $this->sql = $sql; $query = mysql_query($sql,$this->connid); if( !$query ) { if( $this->exception ) throw new Exception(mysql_error($this->connid),mysql_errno($this->connid)); else return false; } else { return $query; } } /***
  • - @desc : Active ou désactive la validation automatique des requêtes
  • - @params : Bool $autocommit
  • - @return : Bool
  • /
public function AutoCommit($autocommit = true) { $auto = ( $autocommit ) ? 1 : 0; $query = @mysql_query('SET autocommit = '.$auto); if( !$query ) { if( $this->exception ) throw new Exception(mysql_error($this->connid),mysql_errno($this->connid)); else return false; } else { return true; } } /***
  • - @desc : Demarre la transaction
  • - @params : None
  • - @return : Bool
  • /
public function Begin() { $query = @mysql_query("BEGIN",$this->connid); if( !$query ) { if( $this->exception ) throw new Exception(mysql_error($this->connid),mysql_errno($this->connid)); else return false; } else { return true; } } /***
  • - @desc : Valide une transaction en cours
  • - @params : None
  • - @return : Bool
  • /
public function Commit() { $query = @mysql_query("COMMIT",$this->connid); if( !$query ) { if( $this->exception ) throw new Exception(mysql_error($this->connid),mysql_errno($this->connid)); else return false; } else { return $query; } } /***
  • - @desc : Annulle une transaction en cours
  • - @params : None
  • - @return : Bool
  • /
public function RollBack() { $query = @mysql_query("ROLLBACK",$this->connid); if( !$query ) { if( $this->exception ) throw new Exception(mysql_error($this->connid),mysql_errno($this->connid)); else return false; } else { return $query; } } /***
  • - @desc : Prepare une requête
  • - @params : String $query
  • - @return : Bool False || Statement
  • /
public function prepare($query) { $stmt = uniqid(mysql_thread_id()); $this->sql = $query; $prep = sprintf('PREPARE `%s` FROM \'%s\'', $stmt, mysql_real_escape_string($query,$this->connid)); if( @mysql_query($prep)) { return $stmt; } else { if( $this->exception ) throw new Exception(mysql_error($this->connid),mysql_errno($this->connid)); else return false; } } /***
  • - @desc : Execute une requête preparé
  • - @params : Array $varArray, Statement $stmt
  • - @return : BOOL False || QueryResult
  • /
public function execute($varArray,$stmt) { foreach($varArray as $id => $val) { $key = sprintf('@`%s`', $id); if( is_numeric($val)) { $sf = '@`%s` = %s'; } else { $sf = '@`%s` = \'%s\''; } $sets[$key] = sprintf($sf, $id, $this->quote((string) $val)); } if( !empty($sets)) { $set = sprintf('SET %s', implode(', ', $sets)); if( mysql_query($set,$this->connid) === false) { if( $this->exception ) throw new Exception(mysql_error($this->connid),mysql_errno($this->connid)); else return false; } $ext = sprintf('EXECUTE `%s` USING %s', $stmt, implode(', ', array_keys($sets))); } else { $ext = sprintf('EXECUTE `%s`', $stmt); } $query = mysql_query($ext,$this->connid); if( !$query ) { if( $this->exception ) throw new Exception(mysql_error($this->connid),mysql_errno($this->connid)); else return false; } else { return $query; } } /***
  • - @desc : Protege les variables utilisés dans les requêtes
  • - @params : String $value, TYPE = PARAM_STR,PARAM_INT ...
  • - @return : value
  • /
public function quote($value,$type=self::PARAM_STR) { switch($type) { case self::PARAM_INT : $value = intval($value); break; case self::PARAM_FLOAT : $value = (float) $value; break; case self::PARAM_BOOL : $value = (bool) $value; break; default: if( (function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc() ) || ini_get('magic_quotes_sybase') ) { $value = stripslashes($value); } $value = mysql_real_escape_string(htmlentities($value, ENT_QUOTES, 'UTF-8', false),$this->connid); break; } return "'".$value."'"; } /***
  • - @desc : Fecth Mode Associatif
  • - @params : Resource query result
  • - @return : query result rows
  • /
public function fetchAssoc($results) { return @mysql_fetch_assoc($results); } /***
  • - @desc : Fecth Mode Object
  • - @params : Resource query result
  • - @return : query result rows
  • /
public function fetchObject($results) { return @mysql_fetch_object($results); } /***
  • - @desc : Fecth Mode NumRows
  • - @params : Resource query result
  • - @return : query result rows
  • /
public function fetchRow($results) { return @mysql_fetch_row($results); } /***
  • - @desc : Fecth Mode Array
  • - @params : Resource query result
  • - @return : query result rows
  • /
public function fetchArray($results) { return @mysql_fetch_array($results); } /***
  • - @desc : Simule le FetchAll de PDO
  • - @params : Query result
  • - @return : Array $results
  • /
public function fetchAll($result) { $results = array(); while($row = @mysql_fetch_array($result) ) { $results[] = $row; } return $results; } /***
  • - @desc : Rettourne le nombre de rsultat d'une requête ou le nombre de champs affecter par une requête de type INSERT,UPDATE
  • - @params : Resource query result
  • - @return : Int numrows
  • / public function rowCount($results) {
if( strpos(strtoupper($this->sql),"SELECT") == 0 ) { return @mysql_num_rows($results); } else { return @mysql_affected_rows($this->connid); } } /***
  • - @desc : Retourne l'id du dernier enregistrement
  • - @params : Void
  • - @return : Int id
  • /
public function lastInsertId() { return @mysql_insert_id($this->connid); } /***
  • - @desc : Librer les resultats de la requête
  • - @params : results
  • - @return : Bool
  • /
public function closeCursor($results) { return mysql_free_result($results); } /***
  • - @desc : Erreur
  • - @params : void
  • - @return : String errorInfo
  • /
public function errorInfo() { return ( $this->connid ) ? mysql_error($this->connid): mysql_error(); } /***
  • - @desc : Erreur Code
  • - @params : void
  • - @return : String errorCode
  • /
public function errorCode() { return ( $this->connid ) ? mysql_errno($this->connid): mysql_errno(); } /***
  • - @desc : Fermeture de la connexion
  • - @params : void
  • - @return : Bool
  • /
public function close() { return ( $this->connid ) ? mysql_close($this->connid): mysql_close(); } } ?>

Conclusion :


Toute remarque ou suggestion est la bienvenue

Codes Sources

A voir également

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.

Du même auteur (devil_may_cry)