<?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 ...";
}
}
*/
?>