[PHP] MYSQL et Orienté Objet

Discussion dans 'Web, design' créé par WaKaaN, 22 Avril 2008.

Statut de la discussion:
Fermée.
  1. Offline
    WaKaaN JcQL
    2 classes :

    PHP:
    class DB     
    {    
        private 
    $db;
        public function 
    __construct($server 'localhost'$admin 'root'$password ''$database 'myDB')
        {
            
    $this->db = @mysql_connect($server$admin$password); 
            if(!
    $this->db) die("Having error in connection = ".@mysql_error());
            if(
    $database != ''$database_con = @mysql_select_db($database);
            if(!
    $database_con) die("Having error in selecting db = ".@mysql_error());
        }

        public function 
    __destruct() 
        {
            @
    mysql_close($db);
        }
        
        public function 
    select() {
             
    $numargs func_num_args();
             switch(
    $numargs) {
                case 
    :     $res_qry mysql_query('SELECT '.func_get_arg(0).' FROM `'.func_get_arg(1).'`') or die("Having error in execution =".@mysql_error());
                            
    //$res_tab = mysql_fetch_array($res_qry);                        
                            
    break;
                case 
    :     $res_qry mysql_query('SELECT '.func_get_arg(0).' FROM '.func_get_arg(1).'` WHERE '.func_get_arg(2)) or die("Having error in execution =".@mysql_error());
                            
    //$res_tab = mysql_fetch_array($res_qry);
                            
    break;
                case 
    :     $res_qry mysql_query('SELECT '.func_get_arg(0).' FROM '.func_get_arg(1).'` WHERE '.func_get_arg(2).' '.func_get_arg(3)) or die("Having error in execution =".@mysql_error());
                            
    //$res_tab = mysql_fetch_array($res_qry);
                            
    break;
             }
             return 
    $res_qry;
        }    
    }
    PHP:
        require_once '../db/db_Oo.php';

        
    $db = new DB();
        
        
    $result $db->select('*''product_type');
        
        while (
    $row mysql_fetch_array ($result)) {
            echo 
    'id:'.$row ['type_id'].' : '.$row ['type_value'].'<br />';
        }
    J'aimerais pouvoir gérer l'affichage de manière plus propre que ce que je fais maintenant, pcq ca me semble pas trop propre...

    J'avais pensé à mettre ca dans ma fonction select(), mais ca ne donne pas de bons résultats...

    Donc, un conseil, un avis?

    Thx :)
    WaKaaN, 22 Avril 2008
    #1
  2. Offline
    WaKaaN JcQL
    Bizarre... Je ne sais pas éditer pour remettre de l'ordre dans la mise en page... Sorry pour le layout... :/
    WaKaaN, 22 Avril 2008
    #2
  3. Offline
    ozilrit Touriste
    Pourrais-tu taper ton code ici : http://pastie.caboo.se/ (PHP et cadenacé (privé)) stp.

    Jrelierai après, là c'est impossip'.
    ozilrit, 22 Avril 2008
    #3
  4. Offline
    ozilrit Touriste
    Quelques petites remarques pour se lancer :
    • Il est de bon goût de préfixer ses variables privées par _.
    • PHP dispose déjà d'une interface pour accéder à une bdd : PDO. Elle fonctionne bien avec mySQL, très mal avec Firebird et pas du tout avec Oracle.
    • Vire les @. Mais vraiment hein. Plus jamais ça. Tu peux très bien placer un "error_reporting (0)" en tête de script.
    • Tu devrais te renseigner sur le design pattern Singleton du Gang of Four.

    J'arrête là, mes yeux piquent : j'attends la version pastie. :-D
    ozilrit, 22 Avril 2008
    #4
  5. Offline
    WaKaaN JcQL
    WaKaaN, 22 Avril 2008
    #5
  6. Offline
    eGm_ Guinea Trump
    c'est pour empecher l'affichage des erreurs mysql
    eGm_, 22 Avril 2008
    #6
  7. Offline
    WaKaaN JcQL
    Huhu... Donc ce qui fait que j'étais complètement à coté de la plaque en me contredisant complètement :p
    WaKaaN, 22 Avril 2008
    #7
  8. Offline
    ozilrit Touriste
    @fonction() équivaut :

    /**
    * On annonce qu'on ne souhaite plus collecter les erreurs.
    *
    * On récupère l'ancienne valeur du niveau d'erreur dans $ancienNiveauErreur.
    */
    $ancienNiveauErreur = error_reporting(0);

    /**
    * On appelle la fonction
    */
    fonction();

    /**
    * On annonce que l'on resouhaite collecter les erreurs du niveau d'erreur ancien
    */
    error_reporting($ancienNiveauErreur);
    ozilrit, 22 Avril 2008
    #8
  9. Offline
    ozilrit Touriste
    private $db;
    $_db

    if(!$this->db)
    Très bien

    if(!$this->db) die("Having error in connection = ".@mysql_error());
    if($database != '') $database_con = @mysql_select_db($database);
    N'ai pas compris.

    public function select() { [...] }
    Non ! Un très gros non ! Essayer de pondre ses requêtes via une fonction est à oublier, définitivement. Un système beaucoup plus simple est de créer une classe "Dao" comme ceci (en très gros, sans commentaires et sans vérifications... tu as l'idée quoi :-D).

    Tiens, j'ai AJ et il sort KQ10 au flop.
    ozilrit, 22 Avril 2008
    #9
Statut de la discussion:
Fermée.