Classe mysql simple (abstraction des requêtes sql)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 575 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

wizard512
Messages postés
470
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013
-
Je note 7/10 pour les commentaires qui sont eux trés instructifs
( comme koi tu a bien faits de poster cette source )
kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
[quote=antoine129]heuu je n'ai aucun message d'erreur.../quote

Dans ton constructeur d'où vient la variable $template ?

Sinon comme dit malalam les or die ne sont pas adaptés... il ne devrait pas y avoir de html dans le code ta class gère mysql point barre... en cas d'erreur ta class stock les infos dans un attribut et c'est une autre class, fonction ou bout de code qui récupère les infos et gère l'affichage de cette dernière... .. .

[quote=FhX]Un gros manque dans ta classe quand même ==> mysql_real_escape_string()//mysql_escape_string()./quote

+1

[quote=FhX]y'a aucune gestion de typage des variables que tu transmets.

Si tu fais un insert d'INT en mettant des ' ' dans ta requete SQL sur un champ INT... attention au risque/quote

+1

Après comme le dit Malalam c'est un peu trop simpliste mais tout dépend des besoins... tout le monde ne fait pas de requetes complexe avec groupement, jointure, etc... donc pour, par exemple, un petit site ça peut suffire... .. .

Je met 5/10... .. .

@ tchaOo°
antoine129
Messages postés
64
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006
-
bah voilà, parfait :)
en plus c'est javascript donc calculs côté client :P
CS, c'est ce qu'il vous faut!
jlgrall
Messages postés
3
Date d'inscription
jeudi 10 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2006
-
Pour la coloration syntaxique automatique, allez voir ce lien qui est très intéressant:
http://www.dreamprojections.com/syntaxhighlighter/Default.aspx
stu76
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
1 -
Salut tout le monde,

Débat très animé pour une couleur, lol. Bon comme dit Malalam tout à été dit sur le sujet.
Moi je voudrais juste mourir moins con si possible. Donc j'ai une question vous parler souvent de classe, fonction, méthod, ... Quelle est la différence et leurs utilités, si quelqu'un pouvait me m'informer sur le sujet se serait sympa ou me donner un lien qui pourrait m'être utile style un tuto ou autre.

Merci à tous

++

Stu76

PS: Courrage Antoine129, bcp ton un peu chambré, mais il sont sympa et pas rencunié.

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.