Also mit Pear bin ich überhaupt nicht zufrieden.
Datenbankklassen gibt es zu hauf, hier mal meine Ausprägung davon:
PHP-Code:
<?
/**
* Stellt eine Datenbankverbindung zu einer MySQL-Datenbank her
* @package THR_lib
* @version 2.1
* @author Michael Baumann aka Turbohummel
* @author Hans Markow aka Randomizer
*/
$con = false;
class DB {
var $counter, $db_name, $db_host, $db_user, $db_password, $dblink, $result, $last;
/**
* Erzeugt das Datenbankobjekt
*/
function DB(){
global $con;
$this->db_host = DB_HOST;
$this->db_user = DB_USER;
$this->db_pw = DB_PASSWORD;
$this->db_name = DB_NAME;
$this->counter = 0;
if($con == false){
$this->dblink = @mysql_connect($this->db_host, $this->db_user ,$this->db_pw)
or die('FEHLER 113 - NO DATABASE SERVER ON THIS DATA');
$con = $this->dblink;
mysql_select_db($this->db_name)
or die ('FEHLER 118 - DATABASE NOT FOUND');
} else {
$this->dblink = $con;
}
}
/**
* Setzt eine Anfrage an die Datenbank ab
*/
function query($sql){
$this->last = $sql;
$this->result = mysql_query($sql);
$this->counter ++;
return $this->error_report(true);
}
/**
* Baut eine einfache SELECT-Abfrage zusammen und setzt sie ab
*/
function select($table, $fields = '*'){
$sql = 'SELECT '.$fields.' FROM '.$table;
return $this->query($sql);
}
/**
* Escaped einen String für sichere Benutzung in der Datenbank
*/
function escape($string, $quotes = true){
$buffer = mysql_escape_string($string);
if($quotes) return '"'.$buffer.'"';
else return $buffer;
}
/**
* Descaped einen String, der für die Datenbank escaped wurde.
*/
function descape($string){
return stripslashes($string);
}
/**
* Liefert den Fehler einer Abfrage
*/
function error_report($expand = false){
if(mysql_errno() != 0){
$msg = 'FEHLER 126 - DATABASE ERROR: '.mysql_errno();
if($expand) $msg .= ' - '.mysql_error().'<br /> Query:<pre>'.$this->last.'</pre>';
die($msg);
return false;
}
else return true;
}
/**
* Liefert die Anzahl der betroffenen Datensätze
*/
function affected(){
$anz = @mysql_affected_rows($this->dblink);
if($anz) return $anz;
else return 0;
}
/**
* Liefert den nächsten Datensatz
*/
function next_record(){
return @mysql_fetch_assoc($this->result);
}
/**
Liefert ein Element des nächsten datendatzes
*/
function next_col($col){
if($buffer = $this->next_record()){
return $buffer[$col];
}
return false;
}
/**
* Liefert alle Datensätze der letzten Abfrage, indizierung 1 - n oder $index
*/
function all_records($index = false){
$erg = array();
while($buffer = $this->next_record()){
if($index){
$erg[$buffer[$index]] = $buffer;
} else {
$erg[] = $buffer;
}
}
return $erg;
}
/**
* Gibt die ID des letzten Inserts zurück
*/
function last_insert(){
return @mysql_insert_id($this->dblink);
}
/**
* Gibt ein Array aus
*/
function dump($erg){
echo $this->last;
echo '<pre>';
var_dump($erg);
echo '</pre>';
}
/**
* Lieft den nächsten Datensatz als numerisches Array
*/
function next_row() {
return @mysql_fetch_row($this->result);
}
}
?>
Selbstverständlich zur freien Verwendung.
DB_HOST; DB_USER; DB_PASSWORD; DB_NAME;
sind über define() erzeugt worden.
Eine Version für PHP5 und MySQL5, sowie ein Transaktionsmodell, ist zur Zeit in Entwicklung, aber noch nicht ganz ausgereift, da ich ernsthaft erst seit ein paar Tagen mit PHP5 arbeite (vorher habe ich nur damit rumgespielt).
Lesezeichen