[PHP] Vorstellung: MySQL-Klasse

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Flyde, 27. November 2009 .

Schlagworte:
  1. 27. November 2009
    Vorstellung: MySQL-Klasse

    Hi

    wer evtl noch meine anderen posts mit klassen kennt... ja ich bin momentan dabei mir mal nen cms zu basteln. Da ich das ding eh nicht verkaufen will hab ich auch kein stress damit den code offen zu legen

    Vorweg:
    1. Klar gibt es 10000000 MySQL-Klassen aber ich denke ich habe mir hier was relativ feines ausgedacht, und zwar bassiert das ganze auf der Klasse PDO die ab PHP5.1 erhältlich ist und prepared satements erlaubt

    2. Habe ich mir OOP selbst beigebracht und mir hat (außer in c++) bis jetzt noch nie jemand bei dem thema auf die finger gehauen, d.h. wenn jemand unschönheiten entdeckt, kann er sie mich gerne wissen lassen

    Die einzelnen methoden sind dabei nichts besonderes.. aber ich überlegte mir: Oftmals macht man fehler beim ausführen von Update und Insert befehlen bezüglich der datentypen und die schreibarbeit inkl. übersicht ist meist nur schwer zu halten finde ich persönlich..

    Lange rede kurzer sinn - hier der code:

    PHP:
    <? php

    class  MySQL
    {
            

            
    private  $objDb  NULL ;     // Datenbankobjekt
            
    private  $strDbLocation  NULL // Datenbankadresse
            
    private  $strDbUser  NULL // Datenbankuser
            
    private  $strDbPassword  NULL ;     // Datenbankpasswort
            
            
    private  $dbPstmt  NULL // Ableger für Prepared Statement
        
            /***********************************************************
            /* Konstruktor: __construct(String, String, String)
            /***********************************************************/
            
    function  __construct ( $_strDbLocation $_strDbUser $_strDbPassword ) {  // Datenbankobjekt von PDO wird bei aufruf der Klasse erstellt
                    
    $this -> strDbLocation  $_strDbLocation ;
                    
    $this -> strDbUser  $_strDbUser ;
                    
    $this -> strDbPassword  $_strDbPassword ;

                    try {
                        
    $this -> objDb  = new  PDO ( $this -> strDbLocation $this -> strDbUser $this -> strDbPassword );
                    }
                    catch (
    PDOException $e ) {
                        echo 
    'Fehler beim &Ouml;ffnen der Datenbank: '  $e -> getMessage ();
                    }
            }
            
            

            
    public function  getResult ( $query ) {
                
    $dbResult  $this -> objDb -> query ( $query );
                return 
    $dbResult ;
            }
            
            

            
    public function  insertStrings ( $db_table $array ) {
                
    // Prüfen, ob die einzufügenden Datensätze in einem Array liegen
                
    if(! is_array ( $array )) {
                    
    // Debug noch nicht vorhanden
                    
    return  false ;
                }
                
                
    // Querystring
                
    $strQuery  "INSERT INTO `" . PREFIX . $db_table . "` SET " ;
                
                while(list(
    $key $val ) =  each ( $array ))
                {
                    
    // Auf Datentyp prüfen
                    
    if( is_string ( $val )) {
                        
    $strQuery .=  "`" . $key . "` = '" . $val . "', " // Daten an Querystring hängen
                    
    }
                    elseif(
    is_numeric ( $val )) {
                        
    $strQuery .=  "`" . $key . "` = " . $val . ", " // Daten an Querystring hängen
                    
    }
                    elseif(
    is_bool ( $val )) {
                        
    $strQuery .=  "`" . $key . "` = " . $val . ", " // Daten an Querystring hängen
                    
    }
                    else {
                        echo 
    "Datentyp nicht korrekt!<br/>" ;
                    }
                }
                
                
    $strQuery  substr ( $strQuery 0 , - 2 );  // Das überhängende ", " abschneiden
                
    $this -> objDb -> query ( $strQuery );  // Query ausführen
            
    }    
            
            

            
    public function  updateStrings ( $db_table $array ) {
                
    // Prüfen, ob die einzufügenden Datensätze in einem Array liegen
                
    if(! is_array ( $array )) { 
                    
    // Debug noch nicht vorhanden
                    
    return  false ;
                }
                
                
    // Querystring
                
    $strQuery  "UPDATE `" . PREFIX . $db_table . "` SET " ;
                
                while(list(
    $key $val ) =  each ( $array ))
                {
                    if(
    is_string ( $val )) {
                        
    $strQuery .=  "`" . $key . "` = '" . $val . "', " // Daten an Querystring hängen
                    
    }
                    elseif(
    is_numeric ( $val )) {
                        
    $strQuery .=  "`" . $key . "` = " . $val . ", " // Daten an Querystring hängen
                    
    }
                    elseif(
    is_bool ( $val )) {
                        
    $strQuery .=  "`" . $key . "` = " . $val . ", " // Daten an Querystring hängen
                    
    }
                    else {
                        echo 
    "Datentyp nicht korrekt!<br/>" ;
                    }
                }
                
                
    $strQuery  substr ( $strQuery 0 , - 2 );  // Das überhängende ", " abschneiden
                
    $this -> objDb -> query ( $strQuery );  // Query ausführen
            
    }
            
            

            
    public function  PrepareStatement ( $query ) {            
                
    $this -> dbPstmt  $this -> objDb -> prepare ( $query );
            }
            
            

            
    public function  bindParam ( $replacement $string ) {            
                
    $this -> dbPstmt -> bindParam ( $replacement $string );
            }
            
            

            
    public function  execute ()
            {
                
    $this -> dbPstmt -> execute ();
            }
    }
    ?>
    Die Klasse ist noch stark ausbaufähig.. hatte mir z.b. mal überlegt eine dynamische Tabellenausgabe mit angegebenen Spalten zu basteln aber bin dabei auf ein paar Probleme gestoßen, müsste ich mich noch mal hinter setzen...

    Bin für Kritik, Lob und Vorschläge gerne offen

    Edit: Debugausgaben sind noch nicht vorhanden!
     
  2. 27. November 2009
    AW: Vorstellung: MySQL-Klasse

    PHP:
    class  MySQL  extends  PDO
    und du könntest dir einiges an schreibarbneit sparen - wobei die klasse eh ned viel sinn macht, da pdo genau für deinen zweck gebaut wurde (viele verschiedene dbs mit selben interface ansprechbar)

    naja, sonst fällt mir noch auf das du alle klassen-variablen mit NULL definierst -> das muss ned sein

    ansonsten kann man das so stehen lassen, schöner style
     
  3. 27. November 2009
    AW: Vorstellung: MySQL-Klasse

    - public function getResult($query)
    - public function PrepareStatement($query)
    - public function bindParam($replacement, $string)
    - public function execute()

    können weg ist doch schon in der pdo-klasse drin.
     
  4. 27. November 2009
    AW: Vorstellung: MySQL-Klasse

    ich hab schon öfter mal versucht was mit extends zu machen.. aber irgendwie hatte ich depp versucht das ganze immer anders zu versuchen... letztenendes kann man dann wahrscheinlich die methoden von pdo einfach über mein objekt der klasse aufrufen , oder?

    Tjaja.. die kleine aber feine lücke im wissen ^^

    edit: das mit dem null.. weiß nich, auch sone dumme angewohnheit aus C, wo mir zumindest beigebracht wurde immer schön zu initialisieren
     
  5. 28. November 2009
    AW: Vorstellung: MySQL-Klasse

    Mir fallen da nur ein paar "Schönheitsfehler" ein. Das ist natürlich geschmackssache:
    Einige der Methoden könntest du private setzen, so dass man von außen nurnoch sagen muss: Ich will einen Wert haben, einen ändern, etc. und nicht mit den Methoden der Klasse selbst hantieren muss.
    Dann würde ich an deiner Stelle Namen von private Variablen mit einem "_" beginnen und nicht anders rum (Parameter mit Unterstrich, private Variablen normal). Wird glaube ich in Zend auch so gemacht und Zend kommt ja direkt aus der PHP Schmiede ^^

    Wie gesagt, nur Schönheitsfehler.

    Dann wurde es ja bereits gesagt, dass eine solche Klasse schon existiert. Ich hatte bei dem Thema jetzt gehofft auf was richtig cooles zu stoßen: In C#, .NET (weiß jetzt nicht genau, woher es kommt) gibts parametriesierte Query Funktionen, ich weiß nicht genau wie man es nennt und erklären kann... Aber man schreibt seine Query und hängt hinten die Parameter an. Ich kann das grad nicht richtig erklären. Vielleicht schaust dus dir mal an (die Express Edition von Visual Studio C# ist kostenlos). Das ist richtig gut!
     
  6. 28. November 2009
    AW: Vorstellung: MySQL-Klasse

    meinst du sowas:
    PHP:
    function  query ( $sql ) {
        
    $args  func_get_args ();
        unset(
    $args [ 0 ]);
        
    $query  vsprintf ( $sql $args );
        return 
    mysql_query ( $query );
    }

    query ( 'SELECT %s, %s, FROM %s WHERE %s = %d' 'foo' 'bar' 'baz' 'field' 1 );
     
  7. 29. November 2009
    AW: Vorstellung: MySQL-Klasse

    Genau, sowas. Dann noch ein paar schöne Methoden für select, update, insert usw. Also eine Klasse, die noch mehr kann und simpel zu bedienen ist.
     
  8. 29. November 2009
    AW: Vorstellung: MySQL-Klasse

    man kann auch einfach nachschauen was für eine abfrage es ist:

    PHP:
    function  query ( $sql )
    {
     
    $op  substr ( $sql , 0 , strpos ( ' ' , $sql ));
     switch(
    $op )
     {
         case 
    'select' : break;
         case 
    'update' $s -> machUpdate (); break; ....
     }
    }
     
  9. 30. November 2009
    AW: Vorstellung: MySQL-Klasse

    Die idee find ich echt cool wobei ich persönlich dann gleich ein prepared statement nutzen würde.. macht aber auch nicht immer sinn, hierbei ist aber auch nicht schlecht, das man sich direkt über die Datentypen im klaren ist und man keinen schreibfehler machen kann

    Die funktion errinert stark an C printf("Meine tolle Zahl %d", 10);
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.