Classe mysql simple (abstraction des requêtes sql)

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

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.