Classe database pour connection et modification d'une bdd mysql

Contenu du snippet

Hello

Oui, je sais ce que vous vous dites : "encore une classe de connection a une base de donnée"
Et a cela je vais retorquer..... bah oui, vous avez raison! Encore une classe
Mais la différence, c'est que c'est pour moi ma premiere class ( et oui, je m'initie à la POO )

donc, pour résumer, cette classe permet de :
- se connecter a la BDD ( c'est quand meme la base )

- ajouter une entrée
- modifier une entrée
- rechercher une entrée
- détruire une entrée
- vider une table
- compte les enregistrements d'une table
- compte les requetes effectuées
- retourne de dernier id d'une table (apres ajout ou modification d'une entrée )

Source / Exemple :


<?php

class Database {

  function __construct($db_host, $db_root, $db_pass, $db_name){

    mysql_connect($db_host, $db_root, $db_pass);
    mysql_select_db($db_name);

    $this -> db_host = $db_host;
    $this -> db_root = $db_root;
    $this -> db_pass = $db_pass;
    $this -> db_name = $db_name;
    $this -> count_request = 0;

  }

  //--------------------------------------------------------------------------------
  // Fonction d'ajout
  //--------------------------------------------------------------------------------

  // Ajoute un nouvel enregistrement
  //--------------------------------------------------------------------------------
  // L'id de l'enregistrement créé est disponible dans $this->$db_table->last_id
  //
  // $attributes: tableau contenant les données à mettre à jour sous la forme : array('champ'=>valeur, ...)
  // $db_table: table concernée par la requete
  //
  // La fonction retourne "true" en cas de succès, "false" sinon
  //--------------------------------------------------------------------------------
  public function add($attributes, $db_table) {

    $sql  = "INSERT INTO $db_table SET ";
    $sql .= $this->make_attributes($attributes);
    $result = $this->mysqlquery($sql);
      
    // Mise à jour du dernier identifiant de la table courrante
    $this->$db_table->last_id = mysql_insert_id();

    // Mise à jour du cache du nombre d'enregistrements
    $this->$db_table->count = $this->count(array(), $db_table);

    return($result);
  }

  //--------------------------------------------------------------------------------
  // Fonction de modification
  //--------------------------------------------------------------------------------

  // Modifie un ou plusieurs champs
  //--------------------------------------------------------------------------------
  // $condition : (string) chaine de caractère conditionnant la requete, et sous la forme : "id = '1' AND ..."
  // $attributes: tableau contenant les données à mettre à jour sous la forme : array('champ'=>valeur, ...)
  // $db_table: table concernée par la requete
  // 
  // La fonction retourne "true" en cas de succès, "false" sinon
  //--------------------------------------------------------------------------------
  public function update_attributes($condition, $attributes, $db_table){
    $sql  = "UPDATE $db_table SET ";
    $sql .= $this->make_attributes($attributes);
    $sql .= " WHERE $condition";
    $result = $this->mysqlquery($sql);

    return($result);
  }

  //--------------------------------------------------------------------------------
  // Fonctions de recherche
  //--------------------------------------------------------------------------------

  // Trouve un enregistrement de la table $db_table
  //--------------------------------------------------------------------------------
  // $param: (array) tableau de paramètres sous la forme : array('where' => 'id = \'1\' ', 'order'=> 'ASC', ...)
  // $db_table: table concernée par la requete
  //
  // La fonction retourne un tableau de valeurs
  //--------------------------------------------------------------------------------
  public function find($find='*', $params=array(), $db_table){

    $sql = "SELECT $find FROM $db_table";
    $sql.= $this->parse_params($params);
    $result = $this->mysqlquery($sql);
    
    return(mysql_fetch_array($result));
  }

  // Compte les enregistrements de la table
  //--------------------------------------------------------------------------------
  // $param: (array) tableau de paramètres sous la forme : array('where' => 'id = \'1\' ')
  // $db_table: table concernée par la requete
  //
  // La fonction retourne un nombre (int)
  //--------------------------------------------------------------------------------
  public function count($params=array(), $db_table){
    $sql = "SELECT * FROM $db_table";
    $sql.= $this->parse_params($params);

    $result = $this->mysqlquery($sql);

    return(mysql_num_rows($result));
  }

  //--------------------------------------------------------------------------------
  // Fonctions de destruction
  //--------------------------------------------------------------------------------

  // Détruit un enregistrement
  //--------------------------------------------------------------------------------
  // $condition : (string) chaine de caractère conditionnant la requete, et sous la forme : "id = '1' AND ..."
  // $param: (array) tableau de paramètres sous la forme : array('where' => 'id = \'1\' ', 'order'=> 'ASC',  ...)
  // $db_table: table concernée par la requete
  //
  // La fonction retourne "true" en cas de succès, "false" sinon
  //--------------------------------------------------------------------------------
  public function destroy($condition, $db_table){

    $sql = "DELETE FROM $db_table WHERE $condition";
    $result = $this->mysqlquery($sql);

    $this->$db_table->last_id = mysql_insert_id();

    $this->$db_table->count = $this->count(array(), $db_table);

    return($result);
  }

  // Effacer tous les enregistrements
  //--------------------------------------------------------------------------------
  // $db_table: table concernée par la requete
  //
  // La fonction retourne "true" en cas de succès, "false" sinon
  //--------------------------------------------------------------------------------
  public function truncate($db_table){
    $sql = "TRUNCATE TABLE $db_table";
    $result = $this->mysqlquery($sql);

    $this->$db_table->count = '0';

    $this->$db_table->last_id = '0';

    return($result);
  }

  // Execute une requète SQL
  //--------------------------------------------------------------------------------
  // $sql: (string) requete SQL a éxécuter
  //
  // La fonction retourne la requete $sql éxécutée ou un message d'erreur 
  //--------------------------------------------------------------------------------
  public function mysqlquery($sql){
    $result = mysql_query($sql);

    if(!$result) throw new Exception($this->mysqlerror($sql));
    else $this->count_request++;
        
    return $result;
  }

  //--------------------------------------------------------------------------------
  // Fonctions protégées
  //--------------------------------------------------------------------------------

  // Affiche un message d'erreur complet
  //--------------------------------------------------------------------------------
  // $sql_query: (string) requete SQL éxécutée par mysqlquery
  //
  // La fonction retourne une chaine de caractères
  //--------------------------------------------------------------------------------
  protected function mysqlerror($sql_query){

    return 'Erreur SQL ' . mysql_errno() . ': ' . mysql_error().'<br />'.$sql_query;

  }

  // Création d'une chaine SQL contenant un ensemble 'champ'=valeur en fonction du table passé en paramètre
  //--------------------------------------------------------------------------------
  // Les champs sont associés aux clés du tableau et les données à leurs valeurs.
  //
  // $attributes: (array) Tableau contenant les données traiter : array('champ'=>valeur, ...)
  //
  // La fonction retourne une chaîne SQL du type 'champ'=valeur, 'champ'=valeur, ...
  //--------------------------------------------------------------------------------
  protected function make_attributes($attributes){
    $keys = array_keys($attributes);
    $sql = '';
    $nb_keys = count($keys);
    for($index=0; $index<$nb_keys ; $index++)
    {
      $key = $keys[$index];
      $value = mysql_real_escape_string($attributes[$key]);

       $sql .= "$key='$value'";

      // Pas le dernier paramètre : on ajoute une virgule
      if($index !== count($keys)-1)
        $sql .= ', ';
    }
    return($sql);
  }

  // Création d'une chaîne SQL contenant les paramètres passés dans le tableau
  //--------------------------------------------------------------------------------
  // Ne traite que les paramettres 'conditions', 'order' et 'limits'
  //
  // $params : (array) Tableau contenant les données traiter : array('parametre'=>valeur, ...)
  //
  // La fonction retourne une chaîne SQL (ou une chaîne vide si aucun paramètre correct n'est passé)
  //--------------------------------------------------------------------------------
  protected function parse_params($params){
    $retour = '';

    if(array_key_exists('where', $params))
      $retour .= ' WHERE '.$params['where'];

    if(array_key_exists('order', $params))
      $retour .= ' ORDER BY '.$params['order'];

    if(array_key_exists('limit', $params))
      $retour .= ' LIMIT '.$params['limit'];
    return $retour;
  }

}
?>

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.