problem mit eigener sql-klasse

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

  • problem mit eigener sql-klasse

    Von den unten im Code stehenden 2 Beispielen funktioniert das obere nicht. Es gibt nichts zurück. Wieso??? Das Query wird korrekt zusammengesetzt, denn $debug = 1 gib mir das Query auch aus. Wenn ich das Query in phpmyadmin ausführe funktioniert es auch und bringt mir eine Zeile zurück. Irgendwelche Ideen?

    PHP-Code:
    <?
    // mysql class
    class mysql
    {
        protected $db_host   = 'localhost';
        protected $database  = '';
        protected $db_user   = '';
        protected $db_pass   = '';
        protected $db_port   = '';
        protected $db_prefix = 'fl_';
        protected $fields    = '*';
        public $debug        = 0;
        
        // constructor
        public function __construct()
        {
            $this->connection = @mysql_pconnect($this->host.':'.$this->db_port, $this->db_user, $this->db_pass) 
            or die("{connect} Database Error: ".mysql_errno()." : ".mysql_error());
            
            $this->select_database = @ mysql_select_db($this->database, $this->connection) 
            or die("{select_db} Database Error: ".mysql_errno()." : ".mysql_error());
        }
        
        // destructor
        public function __destruct() 
        {
            $this->close();
        }

        // close a connection
        public function close()
        {
            //$this->connection = mysql_close();
        }
        
        // process a query 
        public function query($querystring)
        {
            // count the connections
            $this->db_count = !isset($this->db_count) ? 1 : $this->db_count + 1;
            
            // connect to the database
            //if ($this->connection == false) $this->connect();
            //if ($this->connection == false) return;
            
            // return results or errorhandling
            $this->result =  mysql_query($querystring, $this->connection)
            or die("Database Error : ".mysql_errno()." : ".mysql_error().$querystring);
            
            // if debug is set, return the query
            if($this->debug == 1)
            {
                echo $querystring; 
            }
            
            $this->result;
            
            // give the memory free
            //mysql_free_result($this->result);
        }
        
        // fetch results as objects
        public function fetch_object() 
        {
            if (is_resource($this->result)) 
            {
                $row = mysql_fetch_object($this->result);
                if(is_object($row))
                {
                    return $row;
                }
                else 
                {
                    return FALSE;
                }
            }
        }
        
        // fetch results as array
        public function fetch_assoc() 
        {
            if (is_resource($this->result)) 
            {
                $row = mysql_fetch_assoc($this->result);
                if(is_array($row))
                {
                    return $row;
                }
                else 
                {
                    return FALSE;
                }
            }
        }
        
        public function set_table($table)
        {
            $this->table = $table;
        }
        
        public function set_where($string)
        {
            $this->where = ' WHERE '.$string;
        }
        
        public function set_fields($string)
        {
            $this->fields = $string;
        }
        
        public function select()
        {
            $this->query('SELECT '.$this->fields.' FROM '.$this->table.$this->where);
        }
    }

    $sql = new mysql;
    $sql->debug = 1;
    $sql->set_fields('ID_MEMBER, name');
    $sql->set_table('fl_members');
    $sql->set_where("ID_MEMBER = '1'");
    $sql->select();
    while ($row = $sql->fetch_object());
    {
        $tmp = $tmp.$row->name.'<br />'; 
    }
    echo $tmp;

    echo '<br />###########################################################################<br />';

    $sql2    = new mysql;
    $sql2->query('SELECT * FROM fl_members');
    while ($row = $sql2->fetch_object())
    {
        $tmp = $tmp.$row->name.'<br />'; 
    }
    echo $tmp;
    ?>

  • #2
    Re: problem mit eigener sql-klasse

    Mache weitere Debug-Ausgaben - bspw., ob $this-result auch wirklich eine MySQL-Ressource ist, etc.


    Btw: Was beabsichtigst du mit der Anweisung in der Methode query zu erreichen:
    $this->result;
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ops, da stand mal ein echo davor, wenn ich das wieder einsetze kriege ich Resource id #3 zurück.

      Kommentar


      • #4
        hi!
        es ist keine gute Idee die classenvariablen direkt in einer methode deklarieren und gleichzeitig initialisieren.
        ->($this->result,$this->db_count ,...)
        Wenn ich eine Klassen-Methode untersuchen will, und finde dabei eine variable, die in deiner classe nicht declariert ist, dann bin ich gezwungen alle Methoden durchzusuchen um der Geburt von deiner Variable rausfinden können.
        Slava
        bituniverse.com

        Kommentar


        • #5
          Original geschrieben von Slava
          Wenn ich eine Klassen-Methode untersuchen will, und finde dabei eine variable, die in deiner classe nicht declariert ist, dann bin ich gezwungen alle Methoden durchzusuchen um der Geburt von deiner Variable rausfinden können.
          Gut, aber was bringt es mir protected $result = ''; zu deklarieren? Damit weiß ich das es diese Klassenvariable gibt, aber nicht wo sie dann "gefüllt" wird und muß auch wieder suchen. Oder verstehe ich da etwas falsch?

          Das eigentliche Problem löst es aber leider nicht.

          Edit:

          Scheinbar liegt hier irgendwo der Fehler. $row wird nicht korrekt zurückgereicht, aber wieso zum Henker? Die Ausgabe von get_object_vars($row) zeigt an das die Werte korrekt in dem Objekt $row stehen.

          PHP-Code:
              // fetch results as objects
              
          public function fetch_object() 
              {
                  if (
          is_resource($this->result)) 
                  {
                      
          $row mysql_fetch_object($this->result);
                      if(
          is_object($row))
                      {
                          echo 
          print_r(get_object_vars($row));
                          
          //echo $row->name;
                          
          return $row;
                      }
                      else 
                      {
                          return 
          FALSE;
                      }
                  }
              } 
          Zuletzt geändert von burzum; 14.09.2006, 15:30.

          Kommentar


          • #6
            entferne mal das semikolon hinter deinem ersten while-ausdruck.

            Kommentar


            • #7


              Oh man... danke! Das ist mir und keinem der 5 Leute aufgefallen denen ich es gezeigt habe...

              Kommentar


              • #8
                Original geschrieben von burzum
                Gut, aber was bringt es mir protected $result = ''; zu deklarieren? Damit weiß ich das es diese Klassenvariable gibt, aber nicht wo sie dann "gefüllt" wird und muß auch wieder suchen. Oder verstehe ich da etwas falsch?
                du brauchst nicht unbedingt
                $result = '';
                zu schreiben
                aber
                var $result;//mit einem kommentar
                schon

                damit ich oder auch du in 3 Monaten weis, was '$result' in einer anderer methode bedeutet.

                sonnst würde ich sagen, dass @3DMax sehr gute Auge hat.

                Kann sein, dass die Problem noch irgendwo steckt, weil du sagst, dass bei ersten beispiel gar nichts rauskommt.
                Es muss aber auch bei falschgesetztem ";" wenigstens der letzte datensatz angezeigt werden
                Slava
                bituniverse.com

                Kommentar


                • #9
                  Original geschrieben von Slava Kann sein, dass die Problem noch irgendwo steckt, weil du sagst, dass bei ersten beispiel gar nichts rauskommt.
                  Es muss aber auch bei falschgesetztem ";" wenigstens der letzte datensatz angezeigt werden [/B]
                  nö, die while-schleife "dreht durch" und result ist danach false.

                  Kommentar


                  • #10
                    stimmt
                    genug für heute ...
                    keine Zeile mehr
                    Slava
                    bituniverse.com

                    Kommentar

                    Lädt...
                    X