Classe mysql simple (abstraction des requêtes sql)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 539 fois - Téléchargée 25 fois

Contenu du snippet

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 / Exemple :


<?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; } } ?>

A voir également

Ajouter un commentaire

Commentaires

antoine129
Messages postés
64
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006
-
Mais c'est quoi votre coloration syntaxique de merde sur PHPCS?!!
Vous connaissez pas :
http://fr.php.net/manual/fr/function.highlight-string.php
???
Mikiman
Messages postés
5
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
30 juin 2006
-
Parle autrement, soit content que l'on puisse partager nos sources de cette manière.
Respecte le boulot des autres avant tout
kankrelune
Messages postés
1305
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
Tout à fait d'accord avec Mikiman... si t'es pas content Antoine vas poster ailleurs... que dirais tu si je te disais...

"Mais c'est quoi cette class bdd de merde avec du html dedans... tu sais ce que c'est que la poo : http://www.php.net/manual/fr/language.oop.php ???"

Bref c'est complètement inconstructif comme remarque... qui plus est si tu avais réfléchis ne serait ce que deux secondes tu aurais remarqué que les site code-source sont codé en asp et non pas en php... donc tu peux toujours courrir avec ton highlight_string()... y a pas que le php dans la vie... .. .

Bref un commentaire qui ne me donne même pas envie de regarder la source plus que ça... .. .

@ tchaOo°
kankrelune
Messages postés
1305
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
Au fait... met error_reporting à E_ALL dans ton php.ini à vu de nez tu devrais avoir quelques messages d'erreur... notament dans le constructeur... .. .

@ tchaOo°
antoine129
Messages postés
64
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006
-
bon ok je suis peut-être un peu brutal, mais bon, il s'agit bien d'un site dont le but principal est de partager des sources! (en l'occurence en PHP ici)
après tout j'ai bien le droit de critiquer...
et puis de là à dire que ce site est l'ultime et l'unique solution de poster gratuitement nos sources, faut arrêter... d'abord il en existe plein d'autres (j'ai poste cette source sur celui-ci car j'en avais posté d'autres ici avant), et en plus si c'est gratuit c'est pas financé par leur bon coeur, mais plutôt par la pub !
enfin, à propos de la POO, c'est pas parce que ça existe, que c'est à la mode (certes c'est propre, pratique tout ce que vous voulez), mais là le seul html que je pond ce sont les erreurs, et après tout c'est une classe standalone donc bon... la POO...
et la source je la met pas pour que tout le monde la télécharge, si elle ne vous intéresse pas je vais pas en mourir!!!

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.