MySQL Klasse

soyo

Erfahrenes Mitglied
Juhuu,

seit langen habe ich mich mal wieder mit PHP beschäftigt. Ich habe schon früher versuchst mit Klassen und Objekten etwas anzufangen, aber so richtig kam ich nie dazu. Ich habe mich an einer MySQL Klasse versucht und ich würde gern hören was ihr dazu sagt.
Vor allem in Puntko Syntax in Klassen und Methoden bin ich mir noch nicht so sicher und bräuchte da noch Hilfe.

Das wichtigste an der Klasse war mir eigentlich das Error-Handling. Wie ihr seht ist dort fast alles möglich.

Der Code ist denke ich so überschaulich, das er erstmal ohne Dokumentation auskommt.

PHP:
<?php
  error_reporting(0);

  define ("ADMIN_MAILADRESS", "user@host.com");

  define ("MYSQL_HOST", "localhost");

  define ("MYSQL_USER", "root");

  define ("MYSQL_PASSWORD", "");

  define ("MYSQL_DB", "");

  define ("MYSQL_ERROR_DISPLAY", 2);

  define ("MYSQL_ERROR_TO_FILE", 1);

  define ("MYSQL_ERROR_FILEPATH", "../../errorlogs/mysql.log");

  define ("MYSQL_ERROR_TO_MAIL", 0);

  class mysql {
    var $_conn_id = "";
    var $_result = "";
    var $_errno = 0;
    var $_error = "";
    var $_app_name = "";
    var $_message = "";
    var $_sql = "";

	function __construct($host,$user,$password){
	  if(!$this->_conn_id = mysql_connect($host, $user, $password)){
	    $this->getError();
	  } else {
	    return $this->_conn_id;
	  }
	}

    function selectDB($db){
	  if (!mysql_select_db($db, $this->_conn_id)){
		$this->getError();
	  }
	}

	function setAppName($appName){
	  if(!isset($appName)){
	    $this->_app_name = "na";
	  } else {
	    $this->_app_name = $appName;
	  }
	}

	function query($sql,$escape){
	  if($escape == 1) $this->_sql = mysql_real_escape_string($sql);
	  else $this->_sql = $sql;
	  if(!$this->_result = mysql_query($this->_sql)){
	    $this->getError();
	  } else {
        return $this->_result;
      }
	}

	function error(){
	  $tmp = $this->_result;
      $tmp = (bool)$tmp;
      $tmp = !$tmp;
      return $tmp;
    }

    function getError(){
      $mailMes = "";
      $errMess = "";
      if($this->error()){
        $this->_errno = mysql_errno();
		$this->_error = mysql_error();
		if(MYSQL_ERROR_TO_MAIL == 1){
		  $mailMes = "MySQL ERROR Occured ERROR";
		  $mailMes .= "=================================================================";
		  $mailMes .= "     		DATE: ".date("d.m.Y - H:i")."\n";
    	  $mailMes .= "      APPLICATION: ".$this->_app_name."\n";
    	  $mailMes .= "  AFFECTED SERVER: ".$_SERVER['HTTP_HOST']."(".$_SERVER['SERVER_ADDR'].")\n";
    	  $mailMes .= "       PHP SCRIPT: ".$_SERVER['SCRIPT_FILENAME']."\n";
    	  $mailMes .= "SQL ERROR MESSAGE: ".$this->_error."\n";
    	  $mailMes .= "   SQL ERROR CODE: ".$this->_errno."\n";
    	  $mailMes .= "        SQL QUERY: ".$this->_sql."\n";
	  	  $mailHeader = "Content-Type: text/plain; charset=iso-8859-1\r\n";
	  	  $mailHeader .= "Content-Transfer-Encoding: 8bit";
    	  @mail(ADMIN_MAILADRESS,'MySQL ERROR Occured on'.$_SERVER['HTTP_HOST'],$mailMes,$mailHeader);
        }
        if(MYSQL_ERROR_TO_FILE == 1){
		  $errMess .= "             DATE: ".date("d.m.Y - H:i")."\n";
    	  $errMess .= "      APPLICATION: ".$this->_app_name."\n";
    	  $errMess .= "       PHP SCRIPT: ".$_SERVER['SCRIPT_FILENAME']."\n";
    	  $errMess .= "SQL ERROR MESSAGE: ".$this->_error."\n";
    	  $errMess .= "   SQL ERROR CODE: ".$this->_errno."\n";
    	  $errMess .= "        SQL Query:".$this->_sql."\n";
    	  $errMess .= "=================================================================\n";
    	  if (is_writable(MYSQL_ERROR_FILEPATH)) {
    		if($handle = fopen(MYSQL_ERROR_FILEPATH, "a")) {
      		  fputs($handle,$errMess);
      		  fclose($handle);
    		}
   		  }
        }
        switch(MYSQL_ERROR_DISPLAY){
          case 1:
            echo "Database Error occured!<br>";
            break;
          case 2:
            echo "<b>".$this->_errno."</b>&nbsp;-&nbsp;".$this->_app_name."&nbsp;-&nbsp;".$this->_error."<br>";
            echo "<pre>".$this->_sql."</pre>";
            echo "<hr>";
            break;
        }
      }
    }

	function fetchArray(){
	  if($this->error()){
	    $this->getError();
        $return = null;
	  } else {
	    $return = mysql_fetch_assoc($this->_result);
      }
      return $return;
    }

    function fetchValue($table, $field, $value, $returnfield){
      $value = mysql_real_escape_string($value);
      if(!$this->_result = mysql_query("SELECT ".$field.", ".$returnfield." FROM ".$table." WHERE ".$field." = '".$value."'")){
        $this->getError();
        $return = null;
      } else {
        $return = mysql_fetch_assoc($this->_result);
        $return = $return[$returnfield];
      }
      return $return;
    }

    function fetchRow($table, $field, $vaule){
      $value = mysql_real_escape_string($value);
      if(!$this->_result = mysql_query("SELECT * FROM ".$table." WHERE ".$field." = '".$value."'")){
        $this->getError();
        $return = null;
      } else {
        $return = mysql_fetch_assoc($this->_result);
      }
      return $return;
    }

    function getNumRows(){
      if($this->error()){
	    $this->getError();
        $return = null;
	  } else {
	    $return = mysql_num_rows($this->_result);
      }
      return $return;
    }

    function __destruct(){
      $tmp = (bool)$this->_result;
      if(!$tmp){
        mysql_close($this->_conn_id);
      } else {
        mysql_free_result($this->_result);
      }
    }
  }


?>

Tipps und Ideen zur Erweiterung sind gern gesehn :)


Gruß soyo
 
Zuletzt bearbeitet:
Das sieht ja ganz ordentlich aus, auch wenn ich lieber vorgefertigte Lösungen wie adodb oder
das Zend Framework benutze. Ich habe aber zwei Kritikpunkte: Erstens sollte die Klasse nicht, wenn ich sie einbinde mir error_reporting ausschalten, zweitens halte ich es für keine gute Idee, das Script eMails verschicken zu lassen. Fehler treten so gut wie immer gehäuft auf, deine Mailbox ist schneller voll als dir lieb ist, da kannst du sicher sein.
Die einzelnen Methoden sehen sehr solide aus, auch wenn ich mir nur den Namen angeschaut habe.
 
hi,
grundsätzlich sieht der Code gut aus, aber eins solltest du beachten, verwende für Konstanten nicht den Präfix "MYSQL". Zudem solltest du deine Klasse auch etwas anders bennen. Aber das sind Kleinigkeiten. Das mit den Emails verschicken ist fatal, wenn du sowas machst, dann solltest du eine Logger-Klasse haben, die sich um sowas kümmert und nicht bei jedem Fehler sofort ne Mail rausschickt. Und bitte lass das @ vor Funktionen weg! :rolleyes: Irgendwann geht mal was nicht wie es soll und du suchst dir einen ab um den Fehler zu finden, baue bei sowas lieber eine Fehlerbehandlung ein.

zu deinem destructor:
PHP:
    function __destruct(){
      $tmp = (bool)$this->_result;
      if(!$tmp){
        mysql_close($this->_conn_id);
      } else {
        mysql_free_result($this->_result);
      }
    }

müsste eher so lauten

PHP:
    function __destruct(){
      $tmp = (bool)$this->_result;
      if($tmp){
        mysql_free_result($this->_result);
      }
      mysql_close($this->_conn_id);
    }

Viele Grüße!
l|N
 
Neben den bereits genannten Aspekten, sind mit noch ein paar andere Dinge und Fragen auf- beziehungsweise eingegefallen:
  • Wozu die vielen Konstanten wenn Klassen doch mit Klassenattributen etwas viel flexibleres besitzen?
  • Deine Klasse ist derzeit noch eine Mischung aus PHP-4- und PHP-5-Klassensytax. Am besten entscheidest du dich für eine Version oder bietest die Klasse in beiden Versionen an.
  • Die error()-Methode ist sehr umständlich geschrieben.
  • Statt einer eigenen Funktion zum Angängen einer neuer Fehlermeldung würde ich die error_log()-Funktion nehmen und auch nur einzeilige Fehlermeldungen verwenden. Diese könnte auch zum Versenden der E-Mail benutzt werden.
Sonst fehlt mir nur noch eine kleine Dokumentation, die die Aufgaben der einzelnen Attribute und Methoden erläutert. Auch ein Anwendungsbeispiel wäre zur Verdeutlichung gut.
 
Vielen Dank für die Hilfe, werde mich gleich morgen ransetzten.

Über die Sache mit der Fehlermeldung an die Email hab ich erst nicht so genau nachgedacht. Ich werde mir was einfallen lassen das eine Mail täglich versendet wird. Aber das kann nicht so bleiben, das wird das erste sein was ich ändere.

@Gambo: Meinst du das so das ich die Werte als Parameter übergebe und diese dann den Klassenattributen zuweise? Da ich meistens nur mit einer Datenbank arbeite, habe ich gar nicht daran gedacht. Außerdem fand ich es komfortabler alle Konstanten in einer Datei zu definieren. Werde ich aber ändern.
Das mit der error()-Methode ist wohl wahr, das geht auch einfacher.
Die error_log()-Funktion sieht sehr vielversprechend aus, habe ich bisher aber noch nicht mir gearbeitet. Ich wollte das Query und sonstige wichtige Angaben mitspeichern. Aber vielleicht wäre das übertrieben.

Nochmal zu der Destructor Methode. Wenn de MySQL-Resource leer ist, wird der $temp-Variable false zugewiesen. Folglich wird die Verbindung beendet wenn $temp false ist, ansonsten wird der Speicher freigegeben. Oder hab ich da gerade einen Denkfehler?

Nochmals vielen Dank, werd daran arbeiten und melde mich wieder wenn ich die Fehler beseitigt habe.

Gruß soyo
 
Zuletzt bearbeitet:
Guten Morgen,

ich habe nun etwas Zeit gefunden meine MySQL Klasse(PHP5) zu verändern. Die Mail-Funktion, die bei einem Fehler ein Mail gesendet hat, wurde komplett gestrichen. Nun werden alle Fehler übersichtlich in einer TXT-Datei, welche mit .htaccess geschützt ist, gespeichert.
Habe es nun auch geschafft alles zu dokumentieren.

PHP:
<?php
  class db_mysql {
    // string $strUser: MySQL user for databse
    private $strUser = "";
    // string $strPassword: MySQL password für database
    private $strPassword = "";
    // string $strHost: MySQL database host adress
    private $strHost = "";
    // string $strDatabase: MySQL database name
    private $strDatabase = "";
    // string $strPrefix: MySQL table prefix
    private $strPrefix = "";
    // string $resConnectionID: current MySQL connection resource
	private $resConnectionID = "";
	// resource $resResult: current MySQL data resource
    private $resResult = "";
    // integer $iErrNumber: current Mysql error number, if occured
    private $iErrNumber = 0;
    // string $strError: current MySQL error code, if occured
    private $strError = "";
    // string $strAppName: current MySQL applicaten name, if set
    private $strAppName = "";
    // string $strSQL: current MySQL query string
    private $strSQL = "";
    // integer $querycount: nuber of MySQL querys
    public $iQryCount = 0;
    // float $fQryTime: MySQL execution time in ms
    public $fQryTime = 0.00;

    /* constructor __construct(string, string, string)
     * set class attributes
     *** paramter ***
     *     string     $strHost: MySQL hoste adress
     * 	   string     $strUser: MySQL user
     *     string $strPassword: MySQL password
     */
	public function __construct($strHost, $strUser, $strPassword, $strPrefix){
	  $this->strUser = $strUser;
	  $this->strPassword = $strPassword;
	  $this->strHost = $strHost;
	  $this->strPrefix = $strPrefix;

	  if(!$this->resConnectionID = mysql_connect($this->strHost, $this->strUser, $this->strPassword)){
	    $this->getError();
	  } else {
	    return $this->resConnectionID;
	  }
	}

	/* selectDB(string)
     *
     *** paramter ***
     *     string $strDB: MySQL database name
     */
    public function selectDB($strDB){
      $this->strDatabase = $strDB;
	  if (!mysql_select_db($this->strDatabase, $this->resConnectionID)){
		$this->getError();
	  }
	}

	/* setAppName(string)
     * set the MySQL application name ... used for errorlogging
     *** paramter ***
     *     string $appName: MySQL application name
     */
	public function setAppName($strAppName){
	  if(!isset($strAppName)){
	    $this->strAppName = "na";
	  } else {
	    $this->strAppName = $strAppName;
	  }
	}

	/* error()
	 * check if the current MySQL resource return a error
     */
	private function error(){
	  if(!$this->resResult) return true;
	  else return false;
    }

    /* getError()
     * get current MySQL Error and put it in a file ore display on screen
     */
    private function getError(){
      $mailMes = "";
      $errMess = "";
      if($this->error()){
        $this->iErrNumber = mysql_errno();
		$this->strError = mysql_error();
        if(DB_MYSQL_ERROR_TO_FILE == 1){
          $errString = date("d.m.Y H:i")." - Error in file ".$_SERVER['SCRIPT_FILENAME']." (".$this->strAppName."):".$this->strError."\r\n";
          error_log ($errString , 3, DB_MYSQL_ERROR_FILEPATH);
        }
        switch(DB_MYSQL_ERROR_DISPLAY){
          case 1:
            echo "Database Error occured!<br>";
            break;
          case 2:
            echo "<b>".$this->iErrNumber."</b>&nbsp;-&nbsp;".$this->strAppName."&nbsp;-&nbsp;".$this->strError."<br>";
            echo "<pre>".$this->strSQL."</pre>";
            echo "<hr>";
            break;
        }
      }
    }

	/* query(string, integer)
     * effects a MySQL query
     *** paramter ***
     *     string $appName: MySQL application name
     *** return ***
     * resource: MySQL resource
     */
    public function query($strSQL, $iEscape){
	  $start = $this->getMicrotime();
	  $this->iQryCount++;
      if($iEscape == 1) $this->strSQL = mysql_real_escape_string($strSQL);
	  else $this->strSQL = $strSQL;
	  if(!$this->resResult = mysql_query($this->strSQL)){
	    $this->getError();
	  } else {
        return $this->resResult;
      }
      $this->fQryTime += $this->getMicrotime() - $start;
	}

	/* fetchArray()
     * fetch MySQL data(of current mysql resource) in a array
     *** return ***
     * array: associative array with mysql data
     */
	public function fetchArray(){
	  if($this->error()){
	    $this->getError();
        $return = null;
	  } else {
	    $return = mysql_fetch_assoc($this->resResult);
      }
      return $return;
    }

	/* fetchValue(string, string, string, string)
     * fetch only one value from the database
     *** paramter ***
     *     string       $table: MySQL table name
     *     string       $field: MySQL fieldname
     *     string       $value: value of MySQL field
     *     string $returnfield: value, which returned
     *** return ***
     * string: returnfield
     */
    public function fetchValue($strTable, $strField, $strValue, $strReturnField){
      $start = $this->getMicrotime();
      $this->iQryCount++;
      $strValue = mysql_real_escape_string($strValue);
      if(!$this->resResult = mysql_query("SELECT ".$this->strPrefix.$strField.", ".$strReturnField." FROM ".$strTable." WHERE ".$strField." = '".$strValue."'")){
        $this->getError();
        $return = null;
      } else {
        $return = mysql_fetch_assoc($this->resResult);
        $return = $return[$strReturnField];
      }
      $this->fQryTime += $this->getMicrotime() - $start;
      return $return;
    }

	/* fetchRow(string, string, string)
     * fetch only one row from the database
     *** paramter ***
     *     string   $table: MySQL table name
     *     string   $field: MySQL fieldname
     *     string   $value: value of MySQL field
     *** return ***
     * array: associative array with mysql data(row)
     */
    public function fetchRow($strTable, $strField, $strValue){
      $start = $this->getMicrotime();
      $this->iQryCount++;
      $strValue = mysql_real_escape_string($strValue);
      if(!$this->resResult = mysql_query("SELECT * FROM ".$this->strPrefix.$strTable." WHERE ".$strField." = '".$strValue."' LIMIT 0,1")){
        $this->getError();
        $return = null;
      } else {
        $return = mysql_fetch_assoc($this->resResult);
      }
      $this->fQryTime += $this->getMicrotime() - $start;
      return $return;
    }

	/* getNumRows()
     *   fetch the number of records in the current resource
       *** return ***
     *   integer: number of records
     */
    public function getNumRows(){
      if($this->error()){
	    $this->getError();
        $return = null;
	  } else {
	    $return = mysql_num_rows($this->resResult);
      }
      return $return;
    }

    /* search(string, string, string, integer)
     *   fetch only one row from the database
     *** paramter ***
     *      string       $table: MySQL table name
     *      string       $field: MySQL fieldname
     *      string   $searchstr: value of MySQL field searched for
     *	   integer       $limit: number of records
     *** return ***
     *  array: associative array with mysql data(row)
     */
    public function search($strTable, $strField, $strSearchValue, $iLimit){
      $start = $this->getMicrotime();
      $this->iQryCount++;
      $iLimit = mysql_real_escape_string($iLimit);
      $value = mysql_real_escape_string($strSearchValue);
      if(!$this->resResult = mysql_query("SELECT * FROM ".$this->strPrefix.$strTable." WHERE ".$strField." LIKE '%".$strSearchValue."%' LIMIT ".$iLimit)){
        $this->getError();
        $return = null;
      } else {
        $return = $this->resResult;
      }
      $this->fQryTime += $this->getMicrotime() - $start;
      return $return;
    }

	/* getMicrotime()
     * get the current time in ms
     *** return ***
     * float: microtime in ms
     */
    private function getMicrotime(){
      list($usec, $sec) = explode(" ",microtime());
      return ((float)$usec + (float)$sec);
    }

	/* GetQueryTime()
     * return query time
     *** return ***
     * float: microtime in ms
     */
    public function GetQueryTime(){
      return $this->fQryTime;
    }

	/* GetQueryTime()
     * return number of querys
     *** return ***
     * integer: number of querys
     */
    public function GetQueryCount(){
      return $this->iQryCount;
    }

    /* destructor __destruct
     * close the MySQL Connection if open or free
     *** return ***
     * integer: number of querys
     */
    public function __destruct(){
      $tmp = (bool)$this->resResult;
      if(!$tmp){
        mysql_free_result($this->resResult);
      } else {
        mysql_close($this->resConnectionID);
      }
    }
  }
?>

Gruß soyo
 
Zuletzt bearbeitet:
Es ist nicht unbedingt nötig für Variablen, die nur ein einziges Mal benötigt werden wie etwa die Verbindungsdaten, extra Klassenattribute zu reservieren, zumal diese in deinem Fall als privat deklariert und damit auch nicht als von Außen zugängliche Informationsquelle dienen können.

Die Einstellungen zur Fehlerbehandlung sind durch den Einsatz von Konstanten leider sehr beschränkt. Eine flexiblere, auf eine Instanz beschränkte Lösung würde ich bevorzugen.

Die fetchValue()-, fetchRow()- und search()-Methoden würde ich – falls ich solch spezifische Methoden überhaupt aufnehmen würde – mit der query()-Methode koppeln, so dass es nur einen zentralen Algorithmus für die Datenbankabfrage gibt.

Da es eine PHP-5-Klasse sein soll, ist die getMicrotime()-Methode überflüssig, da genau ab dieser Version der microtime()-Funktion ein Parameter spendiert wurde, mit dem die Zeit als Realzahl zurückgegeben wird.

Interessant aber, dass du die Ungarische Notation verwendest. Gibt es einen besonderen Grund dafür?
 
Es gibt keinen besonderen Grund warum ich meine Variablen so benenne. Ich habe es in der Schule bei der Java-Programmierung so angewöhnt. Dort hatte es wirklich einen Sinn, aber in PHP ist es eigentlich überflüssig. Ich habe mich daran gewöhnt, aber andere haben da sicherlich ihre Probleme beim schnellen Überblicken des Quellcodes.

Ich würde jetzt gern sofort loslegen, muss aber leider zu einem Kunden und werde mich heut Abend um die Änderung kümmern.

Schonmal vielen Dank.
 
Habe nun die Änderung vorgenommen. Die seach()-Methode habe ich komplett rausgenommen, da diese wirklich etwas speziell war. Die anderen Methoden zur Abfrage habe ich an die query()-Methode angepasst, da ich diese Methoden doch recht heufigbenötige.

So sieht es nun aus:

PHP:
<?php
  class db_mysql {
    // string $strPrefix: MySQL table prefix
    public $strPrefix = "";

    // string $resConnectionID: current MySQL connection resource
	private $resConnectionID = "";

	// resource $resResult: current MySQL data resource
    private $resResult = "";

    // integer $iErrNumber: current Mysql error number, if occured
    private $iErrNumber = 0;

    // string $strError: current MySQL error code, if occured
    private $strError = "";

    // string $strAppName: current MySQL applicaten name, if set
    private $strAppName = "";

    // string $strSQL: current MySQL query string
    private $strSQL = "";

    // integer $querycount: nuber of MySQL querys
    public $iQryCount = 0;

    // float $fQryTime: MySQL execution time in ms
    public $fQryTime = 0.00;

    /* boolean $bErrorToFile:  true  - errorlogging in file on
 						      false  - errorlogging in file off */
 	public $bErrorToFile;

    /* integer $iErrorDisplayType: 0 - no errormassge
                                   1 - simple errormessage
  							       2 - detailed errormessage. Use only for debugging! */
  	public $iErrorDisplayType;


    /* constructor __construct(string, string, string)
     * set class attributes and open a mysql connection
     *** paramter ***
     *     string       	 $strHost: MySQL hoste adress
     * 	   string       	 $strUser: MySQL user
     *     string   	 $strPassword: MySQL password
     *	   boolean      $bErrorToFile: enable/disable error loggin in file
     *     integer $iErrorDisplayType: switch error type displaying
     */
	public function __construct($strHost, $strUser, $strPassword, $strPrefix, $bErrorToFile, $iErrorDisplayType){
	  $this->strPrefix = $strPrefix;
	  $this->bErrorToFile = $bErrorToFile;
	  $this->iErrorDisplayType = $iErrorDisplayType;

	  if(!$this->resConnectionID = mysql_connect($strHost, $strUser, $strPassword)){
	    $this->getError();
	  } else {
	    return $this->resConnectionID;
	  }
	}

	/* selectDB(string)
     *
     *** paramter ***
     *     string $strDB: MySQL database name
     */
    public function selectDB($strDB){
      $this->strDatabase = $strDB;
	  if (!mysql_select_db($this->strDatabase, $this->resConnectionID)){
		$this->getError();
	  }
	}

	/* setAppName(string)
     * set the MySQL application name ... used for errorlogging
     *** paramter ***
     *     string $appName: MySQL application name
     */
	public function setAppName($strAppName){
	  if(!isset($strAppName)){
	    $this->strAppName = "na";
	  } else {
	    $this->strAppName = $strAppName;
	  }
	}

	/* error()
	 * check if the current MySQL resource return a error
     */
	private function error(){
	  if(!$this->resResult) return true;
	  else return false;
    }

    /* getError(integer, integer)
     * get current MySQL Error and put it in a file and/or display on screen
     */
    private function getError(){
      $mailMes = "";
      $errMess = "";
      if($this->error()){
        $this->iErrNumber = mysql_errno();
		$this->strError = mysql_error();
        if($this->bErrorToFile == true){
          $errString = date("d.m.Y H:i")." - Error in file ".$_SERVER['SCRIPT_FILENAME']." (".$this->strAppName."):".$this->strError."\r\n";
          error_log ($errString , 3, DB_MYSQL_ERROR_FILEPATH);
        }
        switch($this->iErrorDisplayType){
          case 1:
            echo "Database Error occured!<br>";
            break;
          case 2:
            echo "<b>".$this->iErrNumber."</b>&nbsp;-&nbsp;".$this->strAppName."&nbsp;-&nbsp;".$this->strError."<br>";
            echo "<pre>".$this->strSQL."</pre>";
            echo "<hr>";
            break;
        }
      }
    }

	/* query(string, integer)
     * effects a MySQL query
     *** paramter ***
     *     string $appName: MySQL application name
     *** return ***
     * resource: MySQL resource
     */
    public function query($strSQL, $iEscape){
	  $start = microtime(true);
	  $this->iQryCount++;

	  ($iEscape == 1) ? '' : mysql_real_escape_string($strSQL);

	  if(!$this->resResult = mysql_query($this->strSQL)){
	    $this->getError();
	  } else {
        return $this->resResult;
      }
      $this->fQryTime += microtime(true) - $start;
	}

	/* fetchArray()
     * fetch MySQL data(of current mysql resource) in a array
     *** return ***
     * array: associative array with mysql data
     */
	public function fetchArray(){
	  if($this->error()){
	    $this->getError();
        $return = null;
	  } else {
	    $return = mysql_fetch_assoc($this->resResult);
      }
      return $return;
    }

	/* fetchValue(string, string, string, string)
     * fetch only one value from the database
     *** paramter ***
     *     string       $table: MySQL table name
     *     string       $field: MySQL fieldname
     *     string       $value: value of MySQL field
     *     string $returnfield: value, which returned
     *** return ***
     * string: returnfield
     */
    public function fetchValue($strTable, $strField, $strValue, $strReturnField){
      $strValue = mysql_real_escape_string($strValue);
      if(!$this->resResult = $this->query("SELECT ".$this->strPrefix.$strField.", ".$strReturnField." FROM ".$strTable." WHERE ".$strField." = '".$strValue."'", 0)){
        $this->getError();
        $return = null;
      } else {
        $return = mysql_fetch_assoc($this->resResult);
        $return = $return[$strReturnField];
      }
      return $return;
    }

	/* fetchRow(string, string, string)
     * fetch only one row from the database
     *** paramter ***
     *     string   $table: MySQL table name
     *     string   $field: MySQL fieldname
     *     string   $value: value of MySQL field
     *** return ***
     * array: associative array with mysql data(row)
     */
    public function fetchRow($strTable, $strField, $strValue){
      $strValue = mysql_real_escape_string($strValue);
      if(!$this->resResult = $this->query("SELECT * FROM ".$this->strPrefix.$strTable." WHERE ".$strField." = '".$strValue."' LIMIT 0,1", 0)){
        $this->getError();
        $return = null;
      } else {
        $return = mysql_fetch_assoc($this->resResult);
      }
      return $return;
    }

    /* getNumRows()
     *   fetch the number of records in the current resource
       *** return ***
     *   integer: number of records
     */
    public function getNumRows(){
      if($this->error()){
	    $this->getError();
        $return = null;
	  } else {
	    $return = mysql_num_rows($this->resResult);
      }
      return $return;
    }

	/* GetQueryTime()
     * return query time
     *** return ***
     * float: microtime in ms
     */
    public function GetQueryTime(){
      return $this->fQryTime;
    }

	/* GetQueryTime()
     * return number of querys
     *** return ***
     * integer: number of querys
     */
    public function GetQueryCount(){
      return $this->iQryCount;
    }

    /* destructor __destruct
     * close the MySQL Connection if open or free
     *** return ***
     * integer: number of querys
     */
    public function __destruct(){
      if(!$this->resResult){
        mysql_close($this->resConnectionID);
      } else {
        mysql_free_result($this->resResult);
      }
    }
  }
?>
 
Zurück