DB Abfrage mittels PHP Klasse

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • DB Abfrage mittels PHP Klasse

    Hi Phreaks!
    Ich habe eine Klasse zum auslesen einer MySQL DB geschrieben die wunderbar funktioniert doch gibt es Probleme bei der Erweiterung. Die ursprüngliche Klasse liest sämtliche Spalten einer Tabelle und gibt diese als ein Array zurück doch wenn ich diese Klasse erweitere um eine ‚WHERE’ Klausel zu integrieren wird dies unberücksichtigt und die erweiterte Klasse verhält sich gleich wie die ursprüngliche. Die erweiterte Klasse verlangt lediglich die zusätzlichen Parameter welche jedoch keinen Einfluss auf die Ausgabe haben. Dies ist meine erste Klasse deshalb wäre ich euch sehr dankbar wenn Ihr mir helfen könntet herauszufinden warum dieses unerwünschte verhalten auftritt.
    Vielen Dank im Voraus!

    PHP-Code:
        class dbquery {

            var 
    $table;

            function 
    dbquery($table) {
                
    $this->setTable($table);
            }

            function 
    sqlquery() {
                
    $tbl $this->getTable();
                
    $query mysql_query("SHOW COLUMNS FROM $tbl");
                
    $result mysql_fetch_array($query);
                while(
    $result mysql_fetch_array($queryMYSQL_ASSOC)) {
                    
    $Fields[]  = $result['Field'];
                }
                
    $cols implode(",",$Fields);

                
    $query "SELECT $cols FROM $tbl";
                
    $result mysql_query($query);
                while (
    $row mysql_fetch_object($result)) {
                    foreach(
    $Fields as $value) {
                        $
    $value $row->$value;
                        
    $queryres[] = $$value;
                    }
                }
                return 
    $queryres;
              }

              function 
    getTable() {
                return 
    $this->table;
            }

              function 
    setTable($newTable) {
                
    $this->table $newTable;
                return 
    $this->table;
            }
          }
        
        class 
    dbqueryWhere extends dbquery {
            var 
    $clause;
            var 
    $operator;
            var 
    $criteria;
            
            function 
    dbqueryWhere($table$clause$operator$criteria) {
                
    $this->setTable($table);
                
    $this->setWhere($clause);
                
    $this->setOpr($operator);
                
    $this->setKrit($criteria);
            }
            function 
    setClause($newClause) {
                
    $this->clause $newClause;
                return 
    $this->clause;
            }
            function 
    setOperator($newOperator) {
                
    $this->operator $newOperator;
                return 
    $this->operator;
            }
            function 
    setCriteria($newCriteria) {
                
    $this->criteria $newCriteria;
                return 
    $this->criteria;
            }
            function 
    getClause() {
                return 
    $this->clause;
            }
            function 
    getOperator() {
                return 
    $this->operator;
            }
            function 
    getCriteria() {
                return 
    $this->criteria;
            }
            function 
    sqlqueryWhere() {
                
    $tbl $this->getTable();
                
    $cls $this->getClause();
                
    $opr $this->getOperator();
                
    $cri $this->getCriteria(); 
                
                
    $query mysql_query("SHOW COLUMNS FROM $tbl");
                
    $result mysql_fetch_array($query);
                while(
    $result mysql_fetch_array($queryMYSQL_ASSOC)) {
                    
    $Fields[]  = $result['Field'];
                }
                
    $cols implode(",",$Fields);
                
                
    $query "SELECT $cols FROM $tbl WHERE $cls $opr '$cri'";
                
    $result mysql_query($query);
                while (
    $row mysql_fetch_object($result)) {
                    foreach(
    $Fields as $value) {
                        $
    $value $row->$value;
                        
    $queryres[] = $$value;
                    }
                }
                return $
    $value;
              }
        
        
        } 

  • #2
    Da steht nichmal wie sie genutzt wird, geschweige denn eigene ansätze...

    Kommentar


    • #3
      Die Klasse fragt zuerst die Spaltennamen einer definierten Tabelle aus welche als assoziatives Array wiedergegeben werden. Dieses Array wird mittels 'implode()' zu einem Kommagetrennten String umgewandelt welcher in einer 'SELECT FROM' Abfrage verwendet wird und die Werte der Tabellenspalten als einfaches Array ausgibt. Die Werte werden anhand des Arrayschlüssels in Variablen geladen und im PHP Code weiterverwendet.
      z.B.
      PHP-Code:
          $test = new dbquery('test_tbl');    
          
          
      $testarr $test->sqlquery();
          
          
      $wert_01  $testarr[0];
          
      $wert_02  $testarr[1]; 
      Die Obige Klasse sollte um die WHERE Klausel erweitert werden also das gleiche tun wie die ursprüngliche aber es soll nicht alle Datensätze als Array ausgeben sondern bloß einen der anhand des 'WHERE' Kriteriums ausgewählt wird.
      z.B.
      PHP-Code:
          $test = new dbquery('test_tbl','Id','=','3');    
          
          
      $testarr $test->sqlquery();
          
          
      $wert_01  $testarr[0];
          
      $wert_02  $testarr[1]; 
      Weil dies meine erste Klasse ist, die ich geschrieben habe fehlt mir noch einiges an Verständnis bezüglich der Klassenerweiterung. Ich habe dieses Posting hier erstellt mit der Hoffnung das mir jemand helfen kann das nötige verständnis zu erlangen, also sollte ich irgend eine Info die euch die Hilfe erleichtern würde um die ich bitte vorenthalten haben, dann bitte ich euch mir das mitzuteilen.
      Vielen, vielen Dank für eure mühe!

      Kommentar


      • #4
        wär dein SELECT * nicht viel einfacher und würde das gleiche erledigen?
        der stern steht für alle spalten der tabelle, also genau das was du brauchst


        und zum zweiten:
        ...SELECT Id... ??

        Kommentar


        • #5
          PHP-Code:
              $test = new dbquery('test_tbl','Id','=','3');    
              
              
          $testarr $test->sqlquery();
              
              
          $wert_01  $testarr[0];
              
          $wert_02  $testarr[1]; 
          Du musst auch schon die richtige Methode anwenden oder sqlquery() überschreiben!

          Kommentar


          • #6
            PHP-Code:
            $test = new dbquery('test_tbl','Id','=','3'); 
            Autsch!

            Wenn du dbqueryWhere verwenden willst, solltest du ach dbqueryWhere verwenden!

            PHP-Code:
            $test = new dbqueryWhere('test_tbl','Id','=','3'); 

            Kommentar


            • #7
              Du musst auch schon die richtige Methode anwenden oder sqlquery() überschreiben!
              Wäre ja schonmal ei Ansatz die korrekte Klasse zu verwenden!

              Kommentar


              • #8
                Original geschrieben von Breezzer
                wär dein SELECT * nicht viel einfacher und würde das gleiche erledigen?
                der stern steht für alle spalten der tabelle, also genau das was du brauchst


                und zum zweiten:
                ...SELECT Id... ??
                Ja das ist richtig aber meines Wissens nach wird aus Performancegründen das verwenden eines Asterisk's abgeraten. Abgesehen davon ist das nicht mein Problem da ja diese Abfrage einwandfrei funktioniert. Totzdem Danke für deinen Tipp

                Kommentar


                • #9
                  Original geschrieben von TobiaZ
                  PHP-Code:
                  $test = new dbquery('test_tbl','Id','=','3'); 
                  Autsch!

                  Wenn du dbqueryWhere verwenden willst, solltest du ach dbqueryWhere verwenden!

                  PHP-Code:
                  $test = new dbqueryWhere('test_tbl','Id','=','3'); 
                  Sorry das habe ich auch getan war ein Copy/Paste Fehler!

                  Kommentar


                  • #10
                    Manchmal sieht man den Wald vor Bäumen nicht, also die Klasse macht genau das was sie sollte bloss ein kleiner Fehler im Aufruf hat mich zur verzweiflung gebracht. Aber vielen Dank für eure Hilfe!

                    Kommentar


                    • #11
                      Sorry das habe ich auch getan war ein Copy/Paste Fehler!
                      Das wusste ich

                      Kommentar


                      • #12
                        Ja das ist richtig aber meines Wissens nach wird aus Performancegründen das verwenden eines Asterisk's abgeraten. Abgesehen davon ist das nicht mein Problem da ja diese Abfrage einwandfrei funktioniert. Totzdem Danke für deinen Tipp
                        *lol* Und wo ist für dich der unterschied, ob du alle felder via * auswählst, oder ALLE Felder einzeln eingibst?

                        Der eigentliche Grund hinter dieser Aussage ist, dass man generell nur die Felder auslesen sollte, die man auch braucht. Schließlich kann die Tabelle jederzeit (z.B. durch fette Text- oder Blob-Felder) erweitert werden. DA liegt der Performanceunterschied und der grund, warum vom * abgeraten wird.

                        Hinzu kommt, dass du so pro Query eine zusätzliche Query absetzen musst. Das kann gar nicht performant sein.
                        OffTopic:
                        Wie kann man bei Copy&Paste noch nen Fehler machen.

                        Kommentar

                        Lädt...
                        X