PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP-Framework, DB-Classes



chrigu
21-02-2006, 08:47
Hallo zusammen,
Ich muss nächstens ein PHP-Projekt realisieren. Jetzt möchte ich nicht das Rad neu erfinden und alle MySQL-Funktionen z.b selber schreiben. Einige Frameworks habe ich mir angeschaut, diese sind aber z.T. viel zu gross -> PRADO.
Gibt es ganz schlanke Frameworks, wo ich z.b nur Teile benutzen kann, oder noch besser, nur fertige Klassen die ich verwenden kann?

Gruss,
Chrigu

Pingu
21-02-2006, 09:30
Wie wäre es mit dem zu PHP gehörenden Projekt: PEAR (http://pear.php.net/)?

Pingu

Gaert
21-02-2006, 09:50
Hallo,

ich verwende für mein Framework auch PEAR DB, allerdings gekapselt in einer Static Klasse, damit nur ein einziges mal die Datenbankverbindung geöffnet werden muss.
http://pear.php.net/package/DB

Gruß,

Gaert

chrigu
21-02-2006, 09:57
*D'oh*
Das Einfachste ist mir selber nicht in den Sinn gekommen :rolleyes:
Danke, ist genau was ich gesucht habe..

Gruss,
Chrigu

Turbohummel
21-02-2006, 15:27
Also mit Pear bin ich überhaupt nicht zufrieden.
Datenbankklassen gibt es zu hauf, hier mal meine Ausprägung davon:


<?
/**
* 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).

chrigu
21-02-2006, 15:36
Also mit Pear bin ich überhaupt nicht zufrieden.
Warum? Ich hab mir jetz DB angeschaut und Sigma, sieht ziemlich toll aus!