Einzelnen Beitrag anzeigen
Alt 10.09.2008, 17:30   #1 (permalink)
Megger
Erfahrener Benutzer
 

Standard [PHP} Datenbank Klasse

PHP-Code:
<?php
 
/**
  * @file
  * @brief Datenbanklayer
  * @author Hinrich Donner
  *
  * Dieser Quellcode ist urheberrechtlich geschützt. Er kann unter den Lizenzbedingungen der
  * GPL oder LGPL verwendet werden.
  * @package Datenbank
  */
  
 /**
  * @brief Basis-Exception für Datenbank-Anfragen
  */
 
class EDatabase extends Exception
 
{
 }
 
/**
  * @brief Basis-Exception für MySQL-Abfragen
  */
 
class EMySql extends EDatabase
 
{
     
/**
   * @brief Konstruktor
   */
     
function __construct()
     {
         
$message sprintf('%04d: %s'mysql_errno(), mysql_error());
         
parent::__construct($messagemysql_errno());
     }
 }
 
/**
  * @brief Ergebnismenge einer Datenbank-Abfrage
  */
 
abstract class TDatabaseResultSet implements Iterator
 
{
     
/**
   * @brief Anzahl der Zeilen in der Ergebnismenge
   * @var int
   */
     
protected $_num_rows 0;
     
/**
   * @brief Die Ergebnismenge
   * @var array
   */
     
protected $_rows = array();
     
/**
   * @brief Konstruktor
   * @param resource $resource Datenbank-Resource
   */
     /**
   * @brief Das aktuelle Element (Iterator)
   * @return array
   */
     
public function current()
     {
         return 
current($this->_rows);
     }
     
/**
   * @brief Das nächste Element (Iterator)
   * @return array
   */
     
public function next()
     {
         return 
next($this->_rows);
     }
     
/**
   * @brief Der Index des aktuellen Elements (Iterator)
   * @return array
   */
     
public function key()
     {
         return 
key($this->_rows);
     }
     
/**
   * @brief Das erste Element (Rücksetzen des Zeigers, Iterator)
   * @return array
   */
     
public function rewind()
     {
         return 
reset($this->_rows);
     }
     
/**
   * @brief Prüfen des aktuellen Elements (Iterator)
   * @return bool
   */
     
public function valid()
     {
         return (bool) 
is_array($this->current());
     }
  
  public function 
get_num_rows() {
   return 
$this->_num_rows;
  }
 }
 
/**
  * @brief Ergebnismenge einer MySQL-Abfrage
  */
 
class TMySqlResult extends TDatabaseResultSet
 
{
     
/**
   * @brief Konstruktor
   * @param resource $resource MySQL-Ergebnis-Resource
   */
     
function __construct($resource)
     {
   
$this->_num_rows 0;
         while (
$row = @mysql_fetch_assoc($resource))
         {
             
$this->_rows[] = $row;
             ++ 
$this->_num_rows;
         }
     }
 }
 
/**
  * @brief Abstrakte Interface-Definition
  */
 
interface IDatabase
 
{
     
/**
   * @brief Datenbankverbindung aufbauen
   * @param string $host IP oder Domain des Servers
   * @param string $user Berechtigter Benutzer
   * @param string $passwd Kennwort des Benutzers
   */
     
public function connect($host$user$passwd);
     
/**
   * @brief Datenbankverbindung lösen
   */
     
public function close();
     
/**
   * @brief Datenbank auswählen
   * @param string $name Name der Datenbank
   */
     
public function select($name);
     
/**
   * @brief Datenbankanweisung ausführen
   * @param string $sql Die Anweisung an die Datenbank
   * @return mixed
   */
     
public function execute($sql);
     
/**
   * @brief Datenbankabfrage
   * @param string $sql Die Anweisung
   * @param int $offset Relativer Beginn der Ergebnismenge
   * @param int $limit Maximale Anzahl der Zeilen in der Ergebnismenge
   * @return TDatabaseResultSet
   */
     
public function query($sql$offset 0$limit = -1);
 }
 
/**
  * @brief Abstrakte Basis des Datenbank-Layers
  */
 
abstract class TDatabase implements IDatabase
 
{
     
/**
   * @brief Name der aktuellen Datenbank
   * @var string
   */
     
protected $database '';
     
/**
   * @brief Datenbankhandle
   * @var resource
   */
     
protected $resource false;
     
/**
   * @brief Container mit den ausgeführten Anweisungen
   * @var array
   */
     
protected $statements = array();
  
  
/**
  * @brief Anzahl der ausgeführten Querys
  * @var int
  */
  
protected $count_querys 0;
  
  
/**
  * Speichert die Startzeit in Millisekunden
  * @var float
  */
  
protected $start 0;
  
  
/**
  * Speichert die Endzeit in Millisekunden
  * @var float
  */
  
protected $end 0;
     
/**
   * @brief Erste Zeile einer Abfrage ermitteln
   * @param string $sql Anweisung
   * @param int $offset Relativer Offset
   * @return TDatabaseResultSet
   */
     
public function queryRow($sql$offset 0)
     {
         
$dbr $this->query($sql$offset1);
         
$result $dbr->current();
         return 
$result;
     }
     
/**
   * @brief Erste Zelle der ersten Zeile einer Abfrage
   * @param string $sql Die Abfrage
   * @return mixed Der Wert des Feldes
   */
     
public function queryOne($sql)
     {
         
$row $this->queryRow($sql);
         return 
reset($row);
     }
 }
 
/**
  * @brief MySQL-Layer
  */
 
class TMySql extends TDatabase
 
{
     
/**
   * @brief Konstruktor
   * @param string $host IP oder Domain des Servers
   * @param string $name Der Name der Daenbank
   * @param string $user Berechtigter Benutzer
   * @param string $passwd Kennwort des Benutzers
   */
     
function __construct($host$name$user$passwd)
     {
         
$this->connect($host$user$passwd);
         
$this->select($name);
     }
     
/**
   * @brief Destruktor
   */
     
function __destruct()
     {
         
$this->close();
     }
     
/**
   * @brief Datenbankverbindung aufbauen
   * @param string $host IP oder Domain des Servers
   * @param string $user Berechtigter Benutzer
   * @param string $passwd Kennwort des Benutzers
   */
     
public function connect($host$user$passwd)
     {
         
$this->close();
         
$__er error_reporting(E_ERROR);
         if (!
$this->resource mysql_connect($host$userrawurlencode($passwd)))
         {
             
error_reporting($__er);
             throw new 
EMySql();
         }
         
error_reporting($__er);
     }
     
/**
   * @brief Datenbankverbindung lösen
   */
     
public function close()
     {
         if (!
$this->resource)
             return;
         
mysql_close($this->resource);
         
$this->resource false;
     }
     
/**
   * @brief Datenbank auswählen
   * @param string $name Name der Datenbank
   */
     
public function select($name)
     {
         if (!
mysql_select_db($name$this->resource))
             throw new 
EMySql();
         
$this->database $name;
     }
     
/**
   * @brief Datenbankanweisung ausführen
   * @param string $sql Die Anweisung an die Datenbank
   * @return mixed
   */
     
public function execute($sql)
     {
         
$this->statements[] = $sql;
         if (!(
$result mysql_unbuffered_query($sql$this->resource)))
             throw new 
EMySql();
   
$this->count_querys++;
         return 
$result;
     }
     
/**
  * @brief Datenbankabfrage
  * @param string $sql Die Anweisung
  * @param int $offset Relativer Beginn der Ergebnismenge
  * @param int $limit Maximale Anzahl der Zeilen in der Ergebnismenge
  * @return TDatabaseResultSet
  */
     
public function query($sql$offset 0$limit = -1)
     {
   
//echo $sql."<br />";
         
if ($limit != -1)
             
$sql .= sprintf(' LIMIT %d, %d'$offset$limit);
   
$sql $this->execute($sql);
         return new 
TMySqlResult($sql);
     }
  
  
/**
  * Führt den Query aus und liefert danach die letzte insert ID
  * @param string $sql Die Anweisung
  * @return int
  * @author Tobias Lückel
  */
  
public function insert($sql)
  {
   
$this->execute($sql);
   return 
mysql_insert_id();
  }
  
  
/**
  * Führt den Query aus und liefert danach die Anzahl der betroffenen Datensätze
  * @param string $sql Die Anweisung
  * @return int
  * @author Tobias Lückel
  */
  
public function update($sql)
  {
   
$this->execute($sql);
   return 
mysql_affected_rows();
  }
  
  
/**
  * Gibt die aktuelle Datenbankverbindung zurück
  * @return MySQL Resource
  * @author Tobias Lückel
  */
  
public function getResource()
  {
   return 
$this->resource;
  }
  
  
/**
  * Liefert die Anzahl der ausgeführten Querys zurück
  * @return int
  * @author Tobias Lückel
  */
  
public function getAnzahlQuerys()
  {
   return 
$this->count_querys;
  }
  
  
/**
  * Liefert alle ausgeführten Statements zurück
  * @return string
  * @author Tobias Lückel
  */
  
public function getStatements()
  {
   return 
$this->statements;
  }
  
  
/**
  * Liefert einen escapten String zurück
  * @return string
  * @author Tobias Lückel
  */
  
public function escapeString($input)
  {
   return 
mysql_real_escape_string($input,$this->getResource());
  }
 }
?>
was haltet ihr von der Datenbankklasse? Habe ich nicht selber geschrieben, nur ein paar Sachen ergänzt. Was verwendet ihr so? Benutzt ihr überhaupt Klassen?
Megger ist offline   Mit Zitat antworten An Facebook senden