[PHP] MYSQL et Orienté Objet

Statut
N'est pas ouverte pour d'autres réponses.

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 2 :     $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 3 :     $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 4 :     $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 :)
 
1er
OP
WaKaaN

WaKaaN

JcQL
Bizarre... Je ne sais pas éditer pour remettre de l'ordre dans la mise en page... Sorry pour le layout... :/
 

ozilrit

Elite
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
 

eGm_

Gibon Blasé
c'est pour empecher l'affichage des erreurs mysql
 
1er
OP
WaKaaN

WaKaaN

JcQL
Huhu... Donc ce qui fait que j'étais complètement à coté de la plaque en me contredisant complètement :p
 

ozilrit

Elite
@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

Elite
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.
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut