Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL class

Einklappen

Unconfigured Ad Widget

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

  • Marti95.
    hat ein Thema erstellt MySQL class.

    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.

  • Papst
    antwortet
    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!

    Einen Kommentar schreiben:


  • Tiberius
    antwortet
    worauf teilweise bereits in der ersten Antwort von Papst hingewiesen wurde, aber Marti95. irgendwie nicht wirklich zu interessieren scheint?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • Marti95.
    antwortet
    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

    Einen Kommentar schreiben:


  • litterauspirna
    antwortet
    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.

    Einen Kommentar schreiben:


  • dennis81
    antwortet
    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!

    Einen Kommentar schreiben:


  • Marti95.
    antwortet
    Es ist doch nur das
    PHP-Code:
    is_resource 
    PHP4, oder sehe ich das falsch?

    Und habe die @ jetzt entfernt.

    Einen Kommentar schreiben:


  • litterauspirna
    antwortet
    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

    Einen Kommentar schreiben:


  • Marti95.
    antwortet
    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.

    Einen Kommentar schreiben:


  • Tiberius
    antwortet
    ruf connect() vorher auf, ohne DB Verbindung kann das nicht klappen

    Einen Kommentar schreiben:


  • Marti95.
    antwortet
    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) }

    Einen Kommentar schreiben:


  • Papst
    antwortet
    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); 
    ?

    Einen Kommentar schreiben:

Lädt...
X