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