Class Problem

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

  • Class Problem

    Hallo Ihr Profis

    Ich habe vor kurzem angefangen eine Datenbank Class zu Programmieren das hat auch alles super Funktioniert nur jetzt kommt mein Problem.

    index.php
    PHP-Code:
    <?php
    include 'db.class.php';

    // Das wird immer eine einzige Instanz der Klasse abrufen
    $test Database::singleton();
    $test->connect('mysql:host=127.0.0.1;dbname=test''root''');
    $test->query('SELECT * FROM data','query_name');

    echo 
    "<br><br>";

    while(
    $row=$test->get_row('query_name')){
    echo 
    $row[name]."<br>";
    }

    while(
    $row=$test->get_row('query_name')){
    echo 
    $row[name]."<br>";
    }
    ?>
    db.class.php
    PHP-Code:
    <?php
    class Database
    {
    Verbindungsaufbauten

       
    // Speichert die Instanz der Klasse
       
    private static $instance;

       
    // Ein private Konstruktor; verhindert die direkte Erzeugung des Objektes
       
    protected function __construct()
       {
           echo 
    'Ich bin hergestellt';
       }

       
    // Die Singleton Funktion
       
    public static function singleton()
       {
           if (!isset(
    self::$instance)) {
               
    $c __CLASS__;
               
    self::$instance = new $c;
           }

           return 
    self::$instance;
       }

       private function 
    error($message){
        
    # Gibt an ob die Error meldung ausgegeben werden soll
            
    if($this->db_debug){
                
    printf("Database Error: %s\n"$message);
                if(!empty(
    $this->error_nr) && !empty($this->error)){
                    
    printf("SQL Error: %s (%s)\n",$this->error_nr,$this->error);
                }
                die();
            }
      }

       
    // Beispielmethode
       
    public function connect($strDBLocation$strDBUser$strDBpassword$strDBdsn=false$strDBport=false)
       {
        
    # Zerteilt die DBLocation in ihre einzelnen bestandteile
                    
    if (ereg ("^([^:]+):host=([^:]*);dbname=(.+)$"$strDBLocation$reg)) {
                
    $this->driver        $strDBdsn;       // Variable für DSN Treiber
                
    $this->port          $strDBport;      // Datenbank Port
                
    $this->database      $reg[1];         // Um welche DB handelt es sich
                
    $this->host          $reg[2];         // Wie lautet die Adresse zum Server
                
    $this->db_name       $reg[3];         // Name der Datenbank
                
    $this->DBUser        $strDBUser;      // Loginbenutzername für die Datenbank
                
    $this->DBPass        $strDBPassword;  // Loginpassword für die Datenbank
                                       # Alle Datenbanken die Unterstütz werden
                                       # Überprüfung ob die gewünschte Datenbank Unterstützt wird.
                                       
    if(in_array($this->database, array("ifx","msql","mssql","mysql","odbc","pg","sybase"))){
                                   return 
    $this->database();
                                       }else{
                                               
    # Gibt die Error Meldung aus
                                          
    $this->error("Database type not supported");
                                   return 
    false;
                               }
            } else {
                            
    # Gibt die Error Meldung aus
                
    $this->error("Examine the data base");
                return 
    false;
            }
       }

       private function 
    database()
       {
            
    // Selecting connection function and connecting
            
    if(empty($this->connected)){
               
    $db_connect $this->database."_connect";
                
    // INFORMIX
                
    if($this->database == "ifx"){
                    
    $this->connected = @call_user_func($db_connect,$this->db_name."@".$this->host,$this->DBUser,$this->DBPass);
                }else if(
    $this->database == "mysql"){
                    
    // With port
                    
    if(!$this->port){
                        
    $this->connected = @call_user_func($db_connect,$this->host.":".$this->port,$this->DBUser,$this->DBPass);
                    }
                    
    // Without port
                    
    else{
                        
    $this->connected = @call_user_func($db_connect,$this->host,$this->DBUser,$this->DBPass);
                    }
                            
    // mSQL
                
    }else if($this->database == "msql"){
                        
    $this->connected = @call_user_func($db_connect,$this->host,$this->DBUser,$this->DBPass);
                            
    // MS SQL Server
                
    }else if($this->database == "mssql"){
                     
    $this->connected = @call_user_func($db_connect,$this->host,$this->DBUser,$this->DBPass);
                
    // ODBC
                
    }else if($this->database == "odbc"){
                         
    $this->connected = @call_user_func($db_connect,$this->driver,$this->DBUser,$this->DBPass);
                
    // Postgres SQL
                
    }else if($this->database == "pg"){
                    
    // With port
                    
    if(!$this->port){
                        
    $this->connected = @call_user_func($db_connect,"host=".$this->host." port=".$this->port." dbname=".$this->db_name."
     user="
    .$this->DBUser." password=".$this->DBPass);
                    }
                    
    // Without port
                    
    else{
                        
    $this->connected = @call_user_func($db_connect,"host=".$this->host." dbname=".$this->db_name." user=".$this->DBUser."
     password="
    .$this->DBPass);
                    }
                
    // Sybase
                
    }else if($this->database == "sybase"){
                    
    $this->connected = @call_user_func($db_connect,$this->host,$this->DBUser,$this->DBPass);
                }

                            if(!
    $this->connected){
                    
    $this->error("Wrong connection data! Can't establish connection to host.");
                    return 
    false;
                }else{
                    if(
    $this->database != "odbc"){
                        if(!@
    call_user_func($this->database."_select_db",$this->db_name,$this->connected)){
                            
    $this->error("Wrong database data! Can't select database.");
                            return 
    false;
                        }else{
                            return 
    true;
                        }
                    }
                }

            }else{
                
    $this->error("Already connected to database.");
                return 
    false;
            }
       }
       public function 
    query($sql$query_name=null){
            if(
    $this->database == "odbc"){
                
    // ODBC
                
    if(!$this->query_id = @call_user_func($this->database."_exec",$this->connected,trim($sql))){
                    
    $this->error("No database connection exists or invalid query");
                }else{
                    if (!
    $this->query_id) {
                        
    $this->error("Invalid SQL Query");
                        return 
    false;
                    }else{
                                            if(empty(
    $query_name)) {
                            
    $this->query_ids[$this->anz]  = $this->query_id;
                        }else{
                        
    $this->query_ids[$query_name] = $this->query_id;
                        }
                        
    $this->anz++;
                    }
                }
            }else{
                
    // All other databases
                
    if(!$this->query_id = @call_user_func($this->database."_query",trim($sql),$this->connected)){
                    
    $this->error("No database connection exists or invalid query");
                }else{
                    if (!
    $this->query_id) {
                        
    $this->error("Invalid SQL Query");
                        return 
    false;
                    }else{
                                            if(empty(
    $query_name)) {
                            
    $this->query_ids[$this->anz]  = $this->query_id;
                        }else{
                        
    $this->query_ids[$query_name] = $this->query_id;
                        }
                        
    $this->anz++;
                    }
                }
            }
       }
       public function 
    get_row($query_name){
        
    // Überprüft ob eine query_nr angegeben wurde und ob diese existiert
            
    if(isset($query_name) and in_array($query_namearray_keys($this->query_ids))){
            if(
    $this->database == "odbc"){
                
    // ODBC database
                
    if($row = @odbc_fetch_row($this->query_ids[$query_name])){
                                    
    $x=0;
                    for (
    $i=1$i <= @odbc_num_fields($this->query_ids[$query_name]); $i++) {
                        
    $fieldname = @odbc_field_name($this->query_ids[$query_name],$i);
                                            
    $row = @odbc_result($this->query_ids[$query_name],$i);
                                            
    $row_array[$x]= $row$x++; $row_array[$fieldname]= $row;
                    }
                    return 
    $row_array;
                }else{
                    return 
    false;
                }
            }else{
                
    // All other databases
                
    $row = @call_user_func($this->database."_fetch_array",$this->query_ids[$query_name]);
                return 
    $row;
            }
                }else{
            
    $this->error("Invalid SQL Query");
            return 
    false;
                }
       }
       public function 
    count_row($query_name){
        
    // Überprüft ob eine query_nr angegeben wurde und ob diese existiert
            
    if(isset($query_name) and in_array($query_namearray_keys($this->query_ids))){
            
    $row_count = @call_user_func($this->database."_num_rows",$this->query_ids[$query_name]);
                    if(
    $row_count >= 0){
                return 
    $row_count;
            }else{
                
    $this->error("Can't count rows before query was made");
                return 
    false;
            }
                }else{
            
    $this->error("Invalid SQL Query");
            return 
    false;
                }
       }
       public function 
    num_fields($query_name){
        
    // Überprüft ob eine query_nr angegeben wurde un ob diese existiert
            
    if(isset($query_name) and in_array($query_namearray_keys($this->query_ids))){
                    
    $row_fields = @call_user_func($this->database."_num_fields",$this->query_ids[$query_name]);
                    return 
    $row_fields;
                }else{
            
    $this->error("Invalid SQL Query");
            return 
    false;
                }
       }
       public function 
    field_name($num_field=""$query_name){
        
    // Überprüft ob eine query_nr angegeben wurde un ob diese existiert
            
    if(isset($query_name) and in_array($query_namearray_keys($this->query_ids))){
                    if(isset(
    $num_field)){
                         if(
    $this->database == "odbc"){ $num_field++; }
                            
    $field_name = @call_user_func($this->database."_field_name",$this->query_ids[$query_name],$num_field);
                    return 
    $field_name;
                    }else{
                
    $this->error("Can't return the number of fields before fieldindex was made");
                    return 
    false;
            }
                }else{
            
    $this->error("Invalid SQL Query");
            return 
    false;
                }
       }
    }

    ?>
    Wie oben in der index.php angegeben greife ich zweimal auf die $get_row funktion zu allerdings wird diese nur einmal ausgeführt und jetzt ist meine Frage warum, wenn ich nämlich das ganze über einen neuen query aufruf ausführe funktioniert es????

    MfG.
    ppapsd

  • #2
    Schau dir mal die Beschreibung zu odbc_fetch_row an
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      du hast es selbst geschrieben und verstehst es nicht? soso...

      die erste schleife wird so lange ausgeführt, bis die funktion false zurückgibt.
      die zweite schleife überprüft erst mal die bedingung - die funktion gibt false zurück - und wird natürlich nicht ausgeführt.

      absolut richtiges verhalten. lies (etwa im manual) etwas darüber, wie mysql_fetch_array() den datenzeiger von einem datensatz zum nächsten schiebt.

      Kommentar


      • #4
        Ja das ist mir schon klar nur wie kann ich das umgehen so das ich mit dem einem query mehrmals das Auslesen durchführen kann.

        Danke

        Kommentar


        • #5
          Original geschrieben von mrhappiness
          Schau dir mal die Beschreibung zu odbc_fetch_row an
          Da gibt es einen zweiten - optionalen - Parameter, mit dem du festlegen kannst, welcher Datensatz gewünscht ist...
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            speichere die abgefragten daten in einem array zwischen - darauf kannst du dann beliebig oft zugreifen.

            Kommentar


            • #7
              Ja schon nur gibt es den nicht nur in odbc

              Kommentar


              • #8
                Original geschrieben von ppapsd
                Ja schon nur gibt es den nicht nur in odbc
                Wie meinen?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar

                Lädt...
                X