Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL class

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

  • MySQL class

    Hallo,

    Ich habe mir eine schöne MySQL classe geschrieben, leider funktioniert das mysql_num_rows nicht.

    PHP-Code:
    <?php
    class db 

        
    //Desifne variables
        
    var $host   'localhost';
        var 
    $user   '***';
        var 
    $pass   '***';
        var 
    $data   '***';
        
        var 
    $link   NULL;
        var 
    $query  NULL;
        var 
    $result NULL;

      
        function 
    connect() {
        
    //Function connect
            
            
    if(!$this->link = @mysql_connect($this->host,$this->user,$this->pass)) {
            
    //If not connected DB
            
                
    die('Could not connect to the database: '.mysql_error());
                
            }
            
            if(!@
    mysql_select_db($this->data,$this->link)) {
            
    //If not selected DB
            
                
    die('Could not select specified database: '.mysql_error());
                
            }
          
        }

      
        function 
    request($sql) {
        
    //Function request
        
            
    $this->query $sql;
          
            if(
    is_resource($this->link)) {
          
                if(
    is_resource($this->result)) {
            
                    
    mysql_free_result($this->result);
              
                }
            
                
    $this->result mysql_query($this->query) or die('Could not execute SQL query: '.mysql_error());
                return 
    true;
            
            } else {
          
                
    $this->connect();
            
            }
          
        }


        function 
    numrows() {
        
    //Function numrows
        
            
    if(is_resource($this->result)) {
            
                
    $num mysql_num_rows($this->result);
                return 
    $num;
                                
            } else {
            
                
    $this->request($this->query);
                
    $this->numrows();
                
            }
            
        }
            
            
        function 
    fetch_assoc() {
        
    //Function fetch_assoc
        
            
    if(is_resource($this->result)) {
            
                
    $row mysql_fetch_assoc($this->result);
                
                if(
    is_array($row)) {
                
                    return 
    $row;
                    
                } else {
                
                    return 
    false;
                    
                }
                
            } else {
            
                
    $this->request($this->query);
                
    $this->fetch_assoc();
                
            }
            
        }
        
        
        function 
    fetch_object() {
        
    //Function fetch_object
        
            
    if(is_resource($this->result)) {
            
                
    $row mysql_fetch_object($this->result);
                return 
    $row;
                
            } else {
            
                
    $this->request($this->query);
                
    $this->fetch_object();
                
            }
            
        }
        

        function 
    close() {
        
    //Function close
        
            
    if(is_resource($this->link)) {
            
                return 
    mysql_close($this->link);
                
            }
            
        }
        
        
    }
    ?>
    PHP-Code:
    <?php

        define
    ('prefix''wr_');

        require_once 
    '../includes/class/mysql.php';
        
        
    $db = new db;

            
    $db->request("SELECT * FROM ".prefix."users;");
            

            if(
    $db->numrows() > 0) {
                while(
    $ni $db->fetch_object()) {
                

                    echo 
    $ni->id '<br>';

                }        
                
                while(
    $in $db->fetch_assoc()) {
                
                    
                    echo 
    $in['name'] . '<br>';
                }            
            } else {
                echo 
    'Nix zum ausgeben da!';
            }
    ?>
    Also, Das geht nicht:
    PHP-Code:
    if($db->numrows() > 0) { 
    PHP-Code:
        function numrows() {
        
    //Function numrows
        
            
    if(is_resource($this->result)) {
            
                
    $num mysql_num_rows($this->result);
                return 
    $num;
                                
            } else {
            
                
    $this->request($this->query);
                
    $this->numrows();
                
            }
            
        } 
    Hat jemand rat?

    //EDIT:
    Also es wird immer 0 ausgegeben, auch wenn in der DB einträge vorhanden sind.


  • #2
    dieser Teil funktioniert so nicht:
    PHP-Code:
            } else {
            
                
    $this->request($this->query);
                
    $this->numrows();
                
            } 
    da fehlt ein 'return', da die methode sonst nichts zurückgibt!

    für den Rest sehe ich so gerade keinen Fehler. Hast du dir mal dein DB Objekt ausgeben lassen?
    PHP-Code:
    var_dump($db); 
    ?

    Kommentar


    • #3
      Das mit dem return kann ich nicht nachvolziehen. Dort fehlt doch kein return, oder sehe ich das falsch?

      object(db)#1 (7) { ["host"]=> string(9) "localhost" ["user"]=> string( "***" ["pass"]=> string( "***" ["data"]=> string( "***" ["link"]=> resource(3) of type (mysql link) ["query"]=> string(23) "SELECT * FROM table;" ["result"]=> resource(4) of type (mysql result) }

      Kommentar


      • #4
        ruf connect() vorher auf, ohne DB Verbindung kann das nicht klappen
        DevBlog|3D Online-Shopping|Xatrium

        Kommentar


        • #5
          ja, so schlau bin ich auch.
          Es funktioniert alles bis auf den num_rows, wenn ich es so mache:

          PHP-Code:
          if($db->numrows() == 0) {
                      while(
          $ni $db->fetch_object()) {
                      
                          
          // Hier zb. die Ausgabe der Datensätze
                          
          echo $ni->id '<br>';

                      }  

          Dann wird alles Perfekt ausgegeben.
          Aber numrows() sollte nicht leer sein.

          Kommentar


          • #6
            Vieleicht bekommst du sinvolle Fehlerausgaben wenn du die @ mal da raus machst, die da im übrigen gar nichts zu suchen haben. Dann wieso noch alles in PHP4? Es gibt PHP5 schreibe es doch dann gleich darauf, PHP4 braucht kein Mensch mehr.

            Desweiteren solltest du dich auch dringends mal mit dem Thema Datenkapselung beschäftigen und auseinandersetzen, der Code ist meiner Meinung nach wirklich zu gebrauchen.

            Gruß litter
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            http://www.lit-web.de

            Kommentar


            • #7
              Es ist doch nur das
              PHP-Code:
              is_resource 
              PHP4, oder sehe ich das falsch?

              Und habe die @ jetzt entfernt.

              Kommentar


              • #8
                Zitat von Marti95. Beitrag anzeigen
                Es ist doch nur das
                PHP-Code:
                is_resource 
                PHP4, oder sehe ich das falsch?
                Bei dir ist alles "public". Sowohl Methoden als auch Klasseneigenschaften!
                Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
                Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)

                Kommentar


                • #9
                  Zitat von Marti95. Beitrag anzeigen
                  Es ist doch nur das
                  PHP-Code:
                  is_resource 
                  PHP4, oder sehe ich das falsch?

                  Und habe die @ jetzt entfernt.
                  is_resource hat doch nichts mit PHP4 zu tun. Der Unterschied in der OOP von PHP4 zu PHP5 ist das in PHP4 keine Sichtbarkeitsbeschränkungen vorhanden sind. Wie schon gesagt in PHP4 ist generell alles public egal ob Objekteigenschaften wie Objektmethoden. Auch gibt es in PHP4 keinen Constructor an sich in Form von __construct sondern da musst es wie in C++ machen das der Constructor den exakten Namen der Klasse trägt.

                  Also solltest du einfach mal Google bemühen OOP in PHP5 und du wirst selber sehen was die Unterschiede sind.
                  Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                  http://www.lit-web.de

                  Kommentar


                  • #10
                    PHP-Code:
                    <?php
                    class db {
                        
                        
                        function 
                    __construct($hostname$username$password$database) {
                        
                    //MySQL connect
                            
                                
                    if (!$this->res mysql_connect($hostname$username$password)) {
                              
                                die(
                    'Could not connect to the database: '.mysql_error());
                                
                            }
                            
                                if (!
                    mysql_select_db($database,$this->res)) {
                                
                                    die(
                    'Could not select specified database: '.mysql_error());
                            
                            }
                            
                        }
                        
                        
                        function 
                    __destruct() {
                        
                    //MySQL close
                            
                            
                    mysql_close();
                                
                        }
                        
                        
                        function 
                    request($sql) {
                        
                    //Function request
                        
                            
                    if(is_resource($this->result)) {
                            
                                
                    mysql_free_result($this->result);
                              
                            }
                            
                            
                    $this->query $sql;
                            
                    $this->result mysql_query($this->query) or die('Could not execute SQL query: '.mysql_error());
                            return 
                    true;
                        
                        }    
                        
                        
                        function 
                    numrows() {
                        
                    //Function numrows
                        
                            
                    if(is_resource($this->result)) {
                            
                                
                    $num mysql_num_rows($this->result);
                                return 
                    $num;
                                                
                            } else {
                            
                                
                    $this->request($this->query);
                                
                    $this->numrows();
                                
                            }
                            
                        }
                        
                        
                        function 
                    fetch_assoc() {
                        
                    //Function fetch_assoc
                        
                            
                    if(is_resource($this->result)) {
                            
                                
                    $row mysql_fetch_assoc($this->result);
                                
                                if(
                    is_array($row)) {
                                
                                    return 
                    $row;
                                    
                                } else {
                                
                                    return 
                    false;
                                    
                                }
                                
                            } else {
                            
                                
                    $this->request($this->query);
                                
                    $this->fetch_assoc();
                                
                            }
                            
                        }
                        
                        
                        function 
                    fetch_object() {
                        
                    //Function fetch_object
                        
                            
                    if(is_resource($this->result)) {
                            
                                
                    $row mysql_fetch_object($this->result);
                                return 
                    $row;
                                
                            } else {
                            
                                
                    $this->request($this->query);
                                
                    $this->fetch_object();
                                
                            }
                            
                        }
                        
                        
                        public function 
                    affected_rows() {
                        
                            return 
                    mysql_affected_rows($this->res);
                            
                        }
                              
                    }
                    ?>
                    In etwa so?

                    //EDIT:
                    Code geupdatet

                    Kommentar


                    • #11
                      PHP-Code:
                              } else {
                              
                                  
                      $this->request($this->query);
                                  
                      $this->numrows();
                                  
                              } 
                      else-Fall gibt schon mal nichts zurück. Was den Selbstaufruf ziemlich sinnlos macht. Auch wenn das nicht das eigentliche Problem ist.

                      Das selbe gilt auch für die _fetch-Methoden.
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        worauf teilweise bereits in der ersten Antwort von Papst hingewiesen wurde, aber Marti95. irgendwie nicht wirklich zu interessieren scheint?
                        DevBlog|3D Online-Shopping|Xatrium

                        Kommentar


                        • #13
                          die ganze Methodik ist ein wenig von hinten durch die Brust ins Auge...
                          Habe ich keine Verbindung -> verbinden ohne Query auszuführen
                          Beim Aufruf von numrows() wird dann erst der Query ausgeführt.

                          Eine klarere Struktur würde da nicht schaden!

                          Kommentar

                          Lädt...
                          X