Classe database pour connection et modification d'une bdd mysql

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 464 fois - Téléchargée 17 fois

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

Ajouter un commentaire

Commentaires

cs_Lion23
Messages postés
2
Date d'inscription
mercredi 3 octobre 2007
Statut
Membre
Dernière intervention
11 octobre 2007
-
Vu que je suis nouveau dans ce domaine j'ai implémenté ce code et cela marche correctement mais j'ai une petite question à poser, au cas où je voulais créer une classe qui me permettrai de générer du code à partir de n'importe quelle table Mysql que dois je faire? Notons que ce code me permettra d'afficher, modifier ou supprimer la table. Merci
g_barthe
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008
-
C'est en effet une question.
cs_Aaron
Messages postés
116
Date d'inscription
lundi 29 juillet 2002
Statut
Membre
Dernière intervention
19 janvier 2009
-
Hello,

G_Barthe -> C'est une question "Pour la remarque du mysql_close() y en a t'il besoin vu que tu as utilisé la fonction __construct($db_host, $db_root, $db_pass, $db_name)." ou une réponse?
g_barthe
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008
-
Je vais encore rajouter mon grain de sel.

Pour la remarque du mysql_close() y en a t'il besoin vu que tu as utilisé la fonction __construct($db_host, $db_root, $db_pass, $db_name).

Et pour finir, la connexion étant établi sur ma première page, dois-je la réactiver sur la page suivante ou est-elle valable jusqu'à la fermeture de firefox. J'ai un peu de mal sur ces points.

Sinon les premiers tests sont concluants. Ca marche !!!!!!!!!! Merci encore
g_barthe
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008
-
Euh autre petit truc pourrais tu mettre la source en zip parce que le copié collé prend les numéros de lignes en meme temps et c'est un peu chiant à virer. Ou alors j'ai loupé un truc.

Merci si c'est pas trop demandé bien sur. hihi

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.