Location: PHPKode > projects > RSSProxy > includes/Database.class.php
<?php
// Just in development! - my own "framework"


/**
 * Diese abstrakte Klasse gibt das Gerüst vor und führt globale Methoden ein, wie z.B. das Errorhandling.
 *
 * @author Torsten Amshove - amshove.net
 * @version 05.03.2008
 * @package amshove
 * @subpackage database
 */
 
abstract class Database
{
	/**
	 * @var resource $db Bildet die Klassen-Interne Variable mit der Resource aus der Datenbankverbindung
	 */
	protected $db = FALSE;
	
	/**
	 * @var int $count Zähler der Datenbankquerys
	 */
	protected $count = 0;
	
	/**
	 * @var int $time Gesamte Laufzeit aller Datenbankquerys
	 */
	protected $time = 0;
	
	private $errors = "";
	private $last_error = "";
	
  //abstract public function query($qry);
  
  /**
   * Gibt einen Fehler aus und beendet das Script
   *
   * @param string $error Der auszugebende Fehler
   */
  protected function exception($error){
  	die("<b>Fehler:</b> ".$error->getMessage());
  }
  
  /**
   * Speichert einen Fehler für eine spätere Ausgabe
   *
   * @param string $error Der zu speicherde Fehler
   */
  protected function error($error){
  	$this->last_error = $error;
  	if(!empty($this->errors)) $this->errors .= "<br>";
  	$this->errors .= $error;
  }
  
  /**
   * Gibt eine Zeit zurück, mit der die Laufzeit eines Datenbankquerys berechnet werden kann.
   *
   * @return int Timestamp
   */
  protected function runtime(){
  	return microtime(TRUE);
  }
  
  /**
   * Gibt die Anzahl der durchgeführten Datenbankquerys aus
   *
   * @return int Anzahl der durchgeführten Querys
   */
  public function getCount(){
  	return $this->count;
  }
  
  /**
   * Gibt die gesamte benötigte Zeit für alle Datenbankquerys aus
   *
   * @return integer benötigte Zeit aller Querys
   */
  public function getTime(){
  	return $this->time;
  }
  
  /**
   * Gibe alle aufgetauchten Fehler aus
   *
   * @return string alle aufgetretenen Fehler
   */
  public function getErrors(){
  	return $this->errors;
  }

  /**
   * Gibt den letzten Fehler auf
   *
   * @return string letzter Fehler
   */
  public function getLastError(){
  	return $this->error;
  }
}

/**
 * Diese Klasse ist für die Behandlung von MySQL-Datenbanken.
 * Sie wird von "Database" abgeleitet und erbt somit die Vorgaben für das Gerüst, sowie die globalen Methoden.
 *
 * @author Torsten Amshove - amshove.net
 * @version 05.03.2008
 * @package amshove
 * @subpackage database
 */
class Database_MySQL extends Database
{
	
	/**
   * Baut die Verbindung zur Datenbank auf
   *
   * @param string $host Datenbank-Host
   * @param string $user Datenbank-User
   * @param string $pw Datenbank-Passwort
   * @param string $db Zu selektierende Datenbank (optional)
   * @param bool $pconnect Dauerhafte Verbindung zum Datenbank-Server (optional - default: FALSE)
   */
	public function __construct($host,$user,$pw,$db=FALSE,$pconnect=FALSE){
		try{
		  if($pconnect) $this->db = @mysql_pconnect($host,$user,$pw);
		  else $this->db = @mysql_connect($host,$user,$pw,TRUE);
		  
		  if(!$this->db) throw new Exception("Verbindung zur Datenbank fehlgeschlagen. ".mysql_error());
		}catch(Exception $error){
			$this->exception($error);
		}
		
		if($db && $this->db){
			try{
				if(!mysql_select_db($db)) throw new Exception("Die Datenbank konnte nicht ausgewählt werden. ".mysql_error());
			}catch(Exception $error){
				$this->exception($error);
			}
		}
	}
	
	/**
   * Führt einen Datenbankquery aus, misst die Laufzeit und der Zähler wird um einen erhöht. Zurückgegeben wird das Ergebnis
   *
   * @param string $qry Das MySQL Statement
   * @return query Ergebnis des Query
   */
	public function query($qry){
		try{
			$time_start = $this->runtime();
			$return = @mysql_query($qry,$this->db);
			$time_end = $this->runtime();
			
			$this->time += ($time_end - $time_start);
			$this->count++;
			
			if(!$return) throw new Exception("Das SQL-Query wurde nicht richtig ausgeführt. ".mysql_error());
		}catch(Exception $error){
			$this->exception($error);
		}
		return $return;
	}
	
	/**
   * Gibt die Anzahl der Zeilen eines Ergebnisses an, die durch ein SELECT abgefragt wurden.
   *
   * @param query $qry Rückgabewert der Methode Database_MySQL->query();
   * @return int Anzahl Zeilen
   */
	public function num_rows($qry){
		$return = @mysql_num_rows($qry);
		
		if(!$return) $this->error("Database_MySQL->num_rows gibt FALSE zurück.");
		return $return;
	}
	
	/**
   * Gibt die Anzahl der Zeilen aus, die durch ein UPDATE oder DELETE berührt wurden.
   *
   * @return int Anzahl Zeilen
   */
	public function affected_rows(){
		$return = @mysql_affected_rows($this->db);
		
		if(!$return) $this->error("Database_MySQL->affected_rows gibt FALSE zurück.");
		return $return;
	}
	
	/**
	 * Gibt eine Zeile des Ergebnisses zurück.
	 *
	 * @param query $qry Rückgabewert der Methode Database_MySQL->query();
	 * @param int $line Zeilennummer
	 * @param string $field Auszugebendes Feld (optional)
	 * @return mixed Ergebnis
	 */
	public function result($qry,$line,$field = FALSE){
		if(!$field) $return = @mysql_result($qry,$line);
		else $return = @mysql_result($qry,$line,$field);
		
	  if(!$return) $this->error("Database_MySQL->result gibt FALSE zurück.");
	  return $return;
	}
	
	public function close(){
		$return = @mysql_close($this->db);
		
		if(!$return) $this->error("Database_MySQL->close gibt FALSE zurück.");
		return $return;
	}
	
	public function fetch_assoc($qry){
		$query = $this->query($qry);
		$return = array();
		while($row = @mysql_fetch_assoc($query)){
			$return[] = $row;
		}
		
		if(!$return) $this->error("Database_MySQL->fetch_assoc gibt FALSE zurück.");
		return $return;
	}
	
	public function fetch_single($qry){
		$query = $this->query($qry);
		$return = @mysql_fetch_assoc($query);
		
		if(!$return) $this->error("Database_MySQL->fetch_single gibt FALSE zurück.");
		return $return;
	}
	
	public function escape_string($string){
		$return = @mysql_real_escape_string($string);
		
		if(!$return) $this->error("Database_MySQL->escape_string gibt FALSE zurück.");
		return $return;
	}
}

/*
class Database_SQLite extends Database{
	
	public function __construct($db){
		echo "connecting SQLite ...";
	}
}
*/

?>
Return current item: RSSProxy