Accueil > > > CLASSE MYSQL SIMPLE (ABSTRACTION DES REQUÊTES SQL)
CLASSE MYSQL SIMPLE (ABSTRACTION DES REQUÊTES SQL)
Information sur la source
Description
Classe permettant d'utiliser des fonctions simples plutôt que d'écrire des requêtes SQL. Avec gestion des erreurs, gestion de la multi-instanciation de connexions, etc. Par exemple pour insérer des données: $db = new BDD('mabase','localhost','user','password'); $data ['login'] = 'Moi'; $data['password'] = 'bgqpsegvspib'; $data['email'] = 'moi@moi.com'; $n = $db->insert('users',$data); echo 'Utilisateur #'.$n.' ajouté.';
Source
- <?php
- /**
- * Classe d'abstraction de base de données MySQL.
- * @version 2.1
- * @php 4
- * @author Antoine Rousseau - http://mout.fr/
- */
-
- class BDD {
- var $host;
- var $user;
- var $pass;
- var $db;
- var $link;
- var $template;
- var $prefix;
-
- /**
- * Instancie un objet BDD, se connecte au SGBD spécifié,
- * et sélectionne la base spécifiée.
- *
- * @param String $base la base de données
- * @param String $host le serveur
- * @param String $user le login de connexion au SGBD
- * @param String $pass le mot de passe de connexion au SGBD
- * @param String $prefix préfixes des tables, par défaut aucun
- */
- function BDD($base, $host, $user, $pass, $prefix=''){
- $this->host = $host;
- $this->user = $user;
- $this->pass = $pass;
- $this->db = $base;
- $this->prefix = $prefix;
- $this->template = array(0=>'',1=>'');
- //connexion au SGBD :
- $this->link = mysql_connect($this->host, $this->user, $this->pass)
- or die($template[0].'Error connecting to "'.$this->host.'":<pre>'.mysql_error().'</pre>'.$template[1]);
- //sélection de la base de données ("use") :
- mysql_select_db($this->db, $this->link)
- or die($template[0].'Error selecting "'.$this->db.'" database:<pre>'.mysql_error().'</pre>'.$template[1]);
- }
-
- /**
- * Sélectionne des enregistrements.
- *
- * @param String $fields champs à retourner (SELECT, peut être '*')
- * @param String $tables table(s) à lire (FROM)
- * @param String $conditions critères de filtrage (WHERE)
- * @param String $order ordre de tri (par défaut par ordre croissant)
- * @param int $limit limite du nombre de résultats renvoyés, par défaut aucune limite
- * @return Array tableau contenant les enregistrements sélectionnés (1 enregistrement = 1 ligne)
- */
- function select($fields, $tables, $conditions='1', $order='', $limit=0){
- $requete = 'SELECT '.$fields.' FROM '.$this->list_prefix_tables($tables).' WHERE '.$conditions;
- if(!empty($order))
- $requete.= ' ORDER BY '.$order;
- if(!empty($limit) && $limit>0)
- $requete.= ' LIMIT '.$limit;
- $q = $this->query($requete);
- $t = array();
- while($r = mysql_fetch_array($q, MYSQL_ASSOC))
- $t[] = $r;
- return $t;
- }
-
- /**
- * Insert des données dans la base.
- *
- * @param String $into table où insérer les données (INTO)
- * @param Array $data tableau contenant les données (1 ligne = 1 champ)
- */
- function insert($into, $data){
- foreach($data as $k => $v){
- $keys[] = $k;
- $vals[] = $this->quote_smart($v);
- }
- $this->query('INSERT INTO '.$this->prefix.$into.' ('.implode(',',$keys).') VALUES ('.implode(',',$vals).')');
- return mysql_insert_id($this->link);
- }
-
- /**
- * Modifie des données dans la base.
- *
- * @param String $into table où modifier les données
- * @param Array $data tableau contenant les données (1 ligne = 1 champ)
- * @param String $conditions conditions permettant la sélection des enregistrements à modifier
- */
- function update($into, $data, $conditions='1'){
- foreach($data as $k => $v)
- $modifications[] = $k.'='.$this->quote_smart($v);
- $this->query('UPDATE '.$this->prefix.$into.' SET '.implode(',',$modifications).' WHERE '.$conditions);
- }
-
- /**
- * Supprime des données dans la base.
- *
- * @param String $from table où supprimer des données
- * @param String $conditions conditions permettant la sélection des enregistrements à supprimer
- */
- function delete($from, $conditions){
- $this->query('DELETE FROM '.$this->prefix.$from.' WHERE '.$conditions);
- }
-
- /**
- * Vide une table.
- *
- * @param String $table table où supprimer des données
- */
- function truncate($table){
- $this->query('TRUNCATE TABLE '.$this->prefix.$table);
- }
-
- /**
- * Effectue une requête.
- *
- * @param String $requete Requete SQL
- */
- function query($requete){
- $r = mysql_query($requete, $this->link)
- or die($this->template[0].'<b>Error in the query : </b><pre>'.$requete.'</pre>'
- .'<b>MySQL answered : </b><p>'.mysql_error().'</p>'.$this->template[1]);
- return $r;
- }
-
- /**
- * Incrémente ou décrémente une variable.
- *
- * @param String $table table subissant la modification
- * @param String $champ variable à incrémenter/décrémenter de $n
- * @param int $n delta à appliquer à la variable $champ
- * @param String $conditions conditions permettant la sélection des enregistrements dont il faut modifier cette variable
- */
- function delta($table, $champ, $n, $conditions){
- $delta = $n>0 ? "+$n" : "-$n";
- $this->query('UPDATE '.$this->prefix.$table.' SET '.$champ.'='.$champ.$delta.' WHERE '.$conditions);
- }
-
- /**
- * Compte les lignes d'une ou plusieurs tables, selon des conditions ou non.
- *
- * @param String $tables tables dans lesquelles on compte
- * @param String $conditions conditions de comptage
- */
- function count($tables, $conditions='1'){
- $r = $this->query('SELECT COUNT(*) FROM '.$this->list_prefix_tables($tables).' WHERE '.$conditions);
- return mysql_result($r,0,0);
- }
-
- /**
- * Préfixe les tables en paramètre
- *
- * @param Array $tables les tables à préfixer
- * @return Array les tables préfixées
- */
- function list_prefix_tables($tables){
- if(is_array($tables)){
- foreach($tables as $t)
- $tablesP[] = $this->prefix.$t;
- return implode(',',$tablesP);
- }
- else
- return $this->prefix.$tables;
- }
-
- /**
- * Protège la variable
- * @author PHP.NET
- *
- * @param String $value la variable à protéger
- * @return String la variable protégée
- */
- function quote_smart($value){
- if(get_magic_quotes_gpc())
- $value = stripslashes($value);
- if(!is_numeric($value))
- $value = "'".mysql_real_escape_string($value)."'";
- return $value;
- }
-
- /**
- * Modifie la template d'affichage des erreurs
- *
- * @param String $begin le code précédant l'erreur
- * @param String $end le code suivant l'erreur
- */
- function set_template($begin='', $end=''){
- $this->template[0] = $begin;
- $this->template[1] = $end;
- }
-
- }
- ?>
<?php
/**
* Classe d'abstraction de base de données MySQL.
* @version 2.1
* @php 4
* @author Antoine Rousseau - http://mout.fr/
*/
class BDD {
var $host;
var $user;
var $pass;
var $db;
var $link;
var $template;
var $prefix;
/**
* Instancie un objet BDD, se connecte au SGBD spécifié,
* et sélectionne la base spécifiée.
*
* @param String $base la base de données
* @param String $host le serveur
* @param String $user le login de connexion au SGBD
* @param String $pass le mot de passe de connexion au SGBD
* @param String $prefix préfixes des tables, par défaut aucun
*/
function BDD($base, $host, $user, $pass, $prefix=''){
$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->db = $base;
$this->prefix = $prefix;
$this->template = array(0=>'',1=>'');
//connexion au SGBD :
$this->link = mysql_connect($this->host, $this->user, $this->pass)
or die($template[0].'Error connecting to "'.$this->host.'":<pre>'.mysql_error().'</pre>'.$template[1]);
//sélection de la base de données ("use") :
mysql_select_db($this->db, $this->link)
or die($template[0].'Error selecting "'.$this->db.'" database:<pre>'.mysql_error().'</pre>'.$template[1]);
}
/**
* Sélectionne des enregistrements.
*
* @param String $fields champs à retourner (SELECT, peut être '*')
* @param String $tables table(s) à lire (FROM)
* @param String $conditions critères de filtrage (WHERE)
* @param String $order ordre de tri (par défaut par ordre croissant)
* @param int $limit limite du nombre de résultats renvoyés, par défaut aucune limite
* @return Array tableau contenant les enregistrements sélectionnés (1 enregistrement = 1 ligne)
*/
function select($fields, $tables, $conditions='1', $order='', $limit=0){
$requete = 'SELECT '.$fields.' FROM '.$this->list_prefix_tables($tables).' WHERE '.$conditions;
if(!empty($order))
$requete.= ' ORDER BY '.$order;
if(!empty($limit) && $limit>0)
$requete.= ' LIMIT '.$limit;
$q = $this->query($requete);
$t = array();
while($r = mysql_fetch_array($q, MYSQL_ASSOC))
$t[] = $r;
return $t;
}
/**
* Insert des données dans la base.
*
* @param String $into table où insérer les données (INTO)
* @param Array $data tableau contenant les données (1 ligne = 1 champ)
*/
function insert($into, $data){
foreach($data as $k => $v){
$keys[] = $k;
$vals[] = $this->quote_smart($v);
}
$this->query('INSERT INTO '.$this->prefix.$into.' ('.implode(',',$keys).') VALUES ('.implode(',',$vals).')');
return mysql_insert_id($this->link);
}
/**
* Modifie des données dans la base.
*
* @param String $into table où modifier les données
* @param Array $data tableau contenant les données (1 ligne = 1 champ)
* @param String $conditions conditions permettant la sélection des enregistrements à modifier
*/
function update($into, $data, $conditions='1'){
foreach($data as $k => $v)
$modifications[] = $k.'='.$this->quote_smart($v);
$this->query('UPDATE '.$this->prefix.$into.' SET '.implode(',',$modifications).' WHERE '.$conditions);
}
/**
* Supprime des données dans la base.
*
* @param String $from table où supprimer des données
* @param String $conditions conditions permettant la sélection des enregistrements à supprimer
*/
function delete($from, $conditions){
$this->query('DELETE FROM '.$this->prefix.$from.' WHERE '.$conditions);
}
/**
* Vide une table.
*
* @param String $table table où supprimer des données
*/
function truncate($table){
$this->query('TRUNCATE TABLE '.$this->prefix.$table);
}
/**
* Effectue une requête.
*
* @param String $requete Requete SQL
*/
function query($requete){
$r = mysql_query($requete, $this->link)
or die($this->template[0].'<b>Error in the query : </b><pre>'.$requete.'</pre>'
.'<b>MySQL answered : </b><p>'.mysql_error().'</p>'.$this->template[1]);
return $r;
}
/**
* Incrémente ou décrémente une variable.
*
* @param String $table table subissant la modification
* @param String $champ variable à incrémenter/décrémenter de $n
* @param int $n delta à appliquer à la variable $champ
* @param String $conditions conditions permettant la sélection des enregistrements dont il faut modifier cette variable
*/
function delta($table, $champ, $n, $conditions){
$delta = $n>0 ? "+$n" : "-$n";
$this->query('UPDATE '.$this->prefix.$table.' SET '.$champ.'='.$champ.$delta.' WHERE '.$conditions);
}
/**
* Compte les lignes d'une ou plusieurs tables, selon des conditions ou non.
*
* @param String $tables tables dans lesquelles on compte
* @param String $conditions conditions de comptage
*/
function count($tables, $conditions='1'){
$r = $this->query('SELECT COUNT(*) FROM '.$this->list_prefix_tables($tables).' WHERE '.$conditions);
return mysql_result($r,0,0);
}
/**
* Préfixe les tables en paramètre
*
* @param Array $tables les tables à préfixer
* @return Array les tables préfixées
*/
function list_prefix_tables($tables){
if(is_array($tables)){
foreach($tables as $t)
$tablesP[] = $this->prefix.$t;
return implode(',',$tablesP);
}
else
return $this->prefix.$tables;
}
/**
* Protège la variable
* @author PHP.NET
*
* @param String $value la variable à protéger
* @return String la variable protégée
*/
function quote_smart($value){
if(get_magic_quotes_gpc())
$value = stripslashes($value);
if(!is_numeric($value))
$value = "'".mysql_real_escape_string($value)."'";
return $value;
}
/**
* Modifie la template d'affichage des erreurs
*
* @param String $begin le code précédant l'erreur
* @param String $end le code suivant l'erreur
*/
function set_template($begin='', $end=''){
$this->template[0] = $begin;
$this->template[1] = $end;
}
}
?>
Historique
- 03 juin 2006 17:27:06 :
- Ajout de :
return mysql_insert_id($this->link);
dans BDD::insert()
- 06 juin 2006 04:12:45 :
- Bon, j'ai commencé à corriger quelques détails avec vos conseils, mais il me reste encore la gestion des erreurs... une idée ?
Pour le fait que select() renvoie un tableau, je le laisse, même si ça implique souvent un doublement de lecture des lignes de résultat... a moins que vous n'ayez là aussi une idée :)
- 11 décembre 2006 15:26:24 :
- antispam
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Formulaire avec select et update de bdd mysql [ par arnold002 ]
Bonjour à tous,J'ai un formulaire qui contient 2 champs de type select : classe et annee.Je veux associer chaque classe à chaque année
passage de variables de form vers bdd mysql [ par arnold002 ]
Bonjour,Mon problème n'avance pas...Mon form contient 2 champs select for($i<FONT color=#008000 s
Problème affichage BD multiples [ par ekipage2 ]
Bonjour,j'ai plusieurs BD : eleve / matières / et exercicesLorque l'élèv se connecte, il peut afficher la liste des exercices correspondants à sa clas
Recherche mysql [ par simon0000 ]
salut tous le monde ,j'ai une table mysql nomé ecole ou il ya
Retour des données d'une classe MySQL [ par Jerem_ ]
Salut, Depuis ce matin, j'asseye de coter une classe MySQL pour mon site. La classe marche très bien quand je fait une requete INSERT, etc .. M
Bug dans une double liste [ par stu76 ]
Bonjour, Malalam m'a donné des infos hier sur les doubles liste, et je le remercie car ca ma été super utile. J'ai presque résolu le prob sauf que je
Problème de code [ par stu76 ]
Bonjour tout le monde ,Voilà je planche sur un programme scolaire et j'ai un gros prob, je travaille sur un programme qui utilise trois base de d
Problème d'utilisation d'une classe MySQL du site [ par tataye ]
Bonjour,Je suis en train de faire des tests avec la classe SQL de FhX (source N°33135) et je rencontre actuellement quelques difficultés.J'ai fait un
appeller de fonction "interclasses" [ par DDelec24 ]
Bonjour.Je suis bloqué depuis hier sur un problème pour appeller une fonction.Pour résumé:Je possède une classe mysql pour gérer tout ce qui est reque
Classe Connexion.php la plus simple possible .... [ par Tartuffe245 ]
Bonjour à tous,J'ai créé une classe connexion pour mon site internet et il se trouve que j'ai une erreur qui revient souvent mais je ne sais pas comme
|
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
|