Datenbank-Klasse => Verbesserungen?

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

  • Datenbank-Klasse => Verbesserungen?

    Hi Leutz,

    ich habe mal eine Klasse für den Datenbankzugriff geproggt, allerdings würd mich mal interessieren, was Ihr noch verbessern würdet. Jegliche Ideen willkommen!
    Ich habe auf php-resouce natürlich auch einige ähnliche Klassen gefunden, aber so richtig praktisch find ich die alle nicht... also postet mal ;-)

    PHP-Code:
    <?php
    class Database {    
    var 
    $mySQLconnection;
    var 
    $db;
    var 
    $table;
    var 
    $host;
    var 
    $user;
    var 
    $password;
    var 
    $fields;
    var 
    $where;
    var 
    $sqlHandle;    
    var 
    $records;

    function 
    Database() {
        
    $this->setHost();
        
    $this->setUser();
        
    $this->setPassword();
        
    $this->setDB('usr_web101_2');    //lokale "Testdatenbank"
        
    $this->fields '';
        
    $this->where '';
        
    $this->record 0;
    }

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

    function 
    setDB($database){
        
    $this->db $database;
    }

    function 
    setPassword($pass "") {
        
    $this->password $pass;
    }

    function 
    setUser($user "root") {
        
    $this->user $user;
    }

    function 
    setHost($host "localhost") {
        
    $this->host $host;
    }

    function 
    connect() {
        
    $this->mySQLconnection mysql_connect($this->host,$this->user,$this->password);
        
    //Keine Verbindung
        
    if (!$this->mySQLconnection) die ("Keine Verbindung zur SQL - Datenbank!");
        
    //Standardmäßig Datenbank schon auswählen
        
    mysql_select_db($this->db) or die ("Konnte Datenbank nicht öffnen: ".mysql_error());    
    }
            
    function 
    select($sql) {            
        
    $this->sqlHandle mysql_query($sql);
        
    //das Ergebnis in das Klassenarray $this->records speichern
        
    $this->records = array();
        while (
    $record mysql_fetch_array($this->sqlHandle)) {
            
    $this->records[] = $record;
        }
        return 
    $this->sqlHandle;
    }
        
    function 
    get($field) {
        return 
    $this->records[$this->record][$field];
    }

    function 
    howMany() {
        if (
    $this->sqlHandle) {
            return 
    mysql_num_rows($this->sqlHandle);
        }
    }

    function 
    insert($insertArr) {
        
    $fields "(" implode(",",array_flip($insertArr)) . ")";
        
    $values "('" implode("','",$insertArr) . "')";
        
    $sql "INSERT INTO " $this->table " " $fields " VALUES " $values ";";
        
    mysql_query($sql,$this->mySQLconnection);
    }

    function 
    exec($sql) {
        
    mysql_query($sql,$this->mySQLconnection);        
    }
            
    function 
    nextRecord() {
        
    $this->record++;
        if (
    $this->record >= count($this->records)) {
            
    //dann sollte auch noch der "Datensatz-Zeiger" auf 0 gesetzt werden
            
    $this->record 0;                    
            return 
    false;
        } else {
            return 
    true;
        }
    }
    }

    ?>

  • #2
    willste wirklich hören?

    1) sethost, password usw. die brauchst du doch alle nicht, oder? ich denke nicht wirklich! wenn solltest du eine für alle machen.

    2) ob du die connect so aufbauen solltest, dass die was ausgibt? ich halte es idr. so, dass klassen nur ne ausgabe machen, wo es wirklich gewollt ist.

    3) naja, über ne eigene select und insert methode lässt sich auch streiten. eigentlich sollte man in der lage sein, querys von hand zu schreiben, vorallem weil da irgendwann joins etc hinzu kommen... spätestens dann stößt du an deine grenzen und musst die exec() benutzen.

    4) how many berücksichtigt affected rows nicht!

    5) warum speichert select das result in einem array?

    6) funktioniert nextrecord in einer while-schleife?

    7) get kann keine arrays!

    8) namensgebung teilweise auch etwas selten. exec z.b. halte ich für sehr ungeeignet. dann doch lieber query() oder sowas.

    meiner meinung nach einiges auszubessern.

    Kommentar


    • #3
      btw: ist unter projekthilfe glaub' ich besser aufgehoben.
      (oder brainstorming?)
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Bei dem Umfang

        Naja, denke sowas wie OT oder BS wäre besser geeignet. Du sitzt am Hebel @wahsaga.

        Kommentar


        • #5
          ich hab mal die insert() funktion übernommen und in meine klasse eingebaut.

          eine verbindung wird über eine "DSN" aufgebaut, das ist eine Url in der form: mysql://usernameassword@server/database

          folgendes kommt dabei raus, ich denke das ist praktischer.
          könnt ihr gerne benutzen oder euch was daran abschauen.

          PHP-Code:
          <?php
           
          /**
           * USAGE: 
           *  $dsn = "mysql://username:password@host/database_name";
           *  if ($sql = new sql($dsn)) {
           *      connection is ok.
           *      more commands can follow here
           *  } else {
           *      connection not established
           *  }
           *
           **/
           
          /**
           * sql
           * basic sql functions
           */
              
          class sql {
              
          /**
              * @var resource
              * resource id of mysql connection
              * @access private
              **/
              
          var $conn;
              
              
          /**
              * @var resource
              * resource id of last executed query
              * @access public
              **/
              
          var $result;
              
              
          /**
              * @var string
              * mysql error information
              * @access public
              **/
              
          var $error;

              
              
          /**
               * sql::sql()
               * constructor
               * 
               * checks and parses string $dsn to mysql connection data
               * connects to database and selects table
               * returns TRUE if connection is established and database selected
               * returns FALSE if an error occured
               * 
               * @param string $dsn mysql connection url
               * @return boolean
               **/
              
          function sql($dsn
              {
                  
          // check if dsn is correct
                  
          if (!preg_match("/mysql:\/\/([\w]+):([\w]+)@([\w]+)\/([\w]+)/s"$dsn$arr)) {
                      
          $this->error "DSN is not correct";
                      return 
          FALSE;
                  }
                  
          // parse mysql data
                  
          $dsn parse_url($dsn);
                  
                  
          // remove slashes from databasename
                  
          $dsn['path'] = str_replace("/"""$dsn['path']);
                  
                  
          // connect to mysql server
                  
          if (!$this->db_connect($dsn['host'], $dsn['user'], $dsn['pass'])) {
                      return 
          FALSE;
                  }
                  
                  
          // select database
                  
          if (!$this->db_select($dsn['path'])) {
                      return 
          FALSE;
                  }
                  return 
          TRUE;
              }

              
          /**
               * sql::db_connect()
               * @access public
               * 
               * connects to a mysql server.
               * 
               * 
               * @param $host hostname to connect to
               * @param $user username to connect with
               * @param $pass password to connect with
               * @return boolean connection established
               **/
              
          function db_connect($host$user$pass)
              {
                  
          $this->conn mysql_connect($host$user$pass);
                  
          // check for errors
                  
          if ($this->is_error()) {
                      return 
          FALSE;
                  }
                  return 
          TRUE;

              } 


              
          /**
               * sql::db_select()
               * @access public
               * 
               * selects database 
               * 
               * @param $db
               * @return boolean
               **/
              
          function db_select($db)
              {
                  
          mysql_select_db($db);
                  
                  
          // check for errors
                  
          if ($this->is_error()) {
                       return 
          FALSE;
                  }
                  return 
          TRUE;

              } 


              
          /**
               * sql::is_error()
               * 
               * checks if the last mysql operation failed and error information is available.
               * sets $error to use in following debugging operations.
               * 
               * @return boolean
               * @access public
               **/
              
          function is_error()
              {
                  
          // check if there was an error
                  
          if (mysql_errno()) {
                      
          // set $error for debugging
                      
          $this->error mysql_error();
                      return 
          TRUE;
                  }
                  
          // no error occured
                  
          return FALSE;
              }
              
              
          /**
               * sql::query()
               * 
               * performs a mysql_query using param $query
               * - returns a resource if the query was a SELECT and one row or more could be selected.
               * - returns TRUE if the query was UPDATE, DELETE or similiar and succeeded.
               * - returns FALSE if the query failed or no rows were selected.
               * 
               * @param string $query 
               * query to perform
               * 
               * @return resource|boolean
               * @access public
               **/
              
          function query($query)
              {
                  
          $this->result mysql_query($query);
                  
          // check for error
                  
          if ($this->is_error()) {
                      return 
          FALSE;
                  }
                  if (
          mysql_affected_rows() >= 0) {
                      
          // UPDATE/DELETE Query was successfull
                      
          return TRUE;
                  }
                  if (
          mysql_num_rows($this->result) > 0) {
                      
          // one or more rows could be selected, resource can be used
                      
          return $this->result;
                  }
                  return 
          FALSE;
              } 


              
          /**
               * sql::fetch()
               * 
               * returns an array with the results or FALSE
               * use print_r() to view the array structure
               * 
               * @param $query
               * query to perform
               * 
               * @return array|boolean
               * @access public
               **/
              
          function fetch($query)
              {
                  
          // execute query and check for errors or NULL-results
                  
          if (!$this->query($query)) {
                      return 
          FALSE;
                  }
                  
                  
          // make an array containing the results
                  
          $return = array();    
                  while (
          $row mysql_fetch_assoc($this->result)) {
                      
          $return[] = $row;
                  }
                  return 
          $return;
              } 
              
              
          /**
               * sql::insert()
               * 
               * inserts values into a given table.
               * 
               * @param string $table 
               * name of table to insert into
               * 
               * @param array $insert 
               * array (field => value)
               * 
               * @return boolean
               * @access public
               **/
              
          function insert($table$insert
              {
                  
          // form query out of array
                  
          $fields "(" implode(",",array_flip($insert)) . ")";
                  
          $values "('" implode("','",$insert) . "')";
                  
          $query  "INSERT INTO " $table " " $fields " VALUES " $values ";";
                  
                  
          // execute query and check for errors
                  
          if ($this->query($query)) {
                      return 
          TRUE;
                  }
                  return 
          FALSE;
              }

              
          /**
               * sql::free()
               * @access public
               * 
               * free's memory after mysql usage
               * 
               * @return boolean
               **/
              
          function free()
              {
                  if(
          mysql_free_result($this->result)) {
                      return 
          TRUE;
                  } else {
                      return 
          FALSE;
                  }
              } 


          ?>

          Kommentar

          Lädt...
          X