Hallo.
Ich hatte da mal auf meiner alten Website ein schönes Tutorial/Codeschnipsel. Könnte dir helfen:
Klasse (class_db.php):
PHP:
<?php
/*
* Datenbankklasse
* Diese Mysql Klasse vereinfacht den Zugriff auf eine Datenbank
* Nach einbinden der Klasse ist es mit 3 Zeilen möglich eine
* Abfrage auszuführen
*/
class db1 {
########## Attribute ##########
var $Server = "localhost"; // Mysql Host
var $User = "user"; // Mysql Benutzer
var $Pass = "pw"; // Mysql Passwort
var $DBank = "db"; // Mysql Datenbank
var $erg; //Ergbnismenge
var $anz; //Datensätze
var $ID; //ID eines neu eingefügten Datensatzes
var $affectedrows; //Anzal der betroffenen Datensätze
var $fehler; //letzte Fehlermedung von MySQL
####### Attribute ende ########
######## Konstruktor ##########
function db1() {
// Mit dem Server Verbinden //
$this->verbinden();
// Datenbank auswählen //
$select = mysql_select_db($this->DBank,$this->conn);
}
###### Konstruktor ende #######
### Methode für die Abfrage ###
function db_sql($sql,$debug=0) {
// Anfragen zählen //
static $DBcount;
$this->dbcount=++$DBcount;
// Werte auslesen //
$this->erg=@mysql_query($sql, $this->conn);
$this->anz=@mysql_num_rows($this->erg);
$this->ID=@mysql_insert_id();
$this->affectedrows=@mysql_affected_rows();
// Debug modus : ausgabe des sql codes //
if($debug==1){ echo "<br>".$sql."<br>"; }
// Elemente in array Schreiben //
if($this->anz > 0) {
for($i=0; $i<$this->anz; $i++){
$back[$i]=mysql_fetch_array($this->erg);
}
}
// Fehlermeldung abfangen und evt. Ausgeben //
elseif(!$this->erg) {
$this->fehler=mysql_error();
if($debug==1){ echo "<br>".$this->fehler."<br>"; }
return FALSE;
}
// Keine Elemente //
elseif($this->anz==0) {
return FALSE;
}
else{ return TRUE; }
return $back;
}
######### Ende Methode ########
#### Methode zum Verbinden ###
function verbinden() {
// Evt. Verbindung wieder holen //
static $conn;
// Wenn keine Verbindung vorhanden neu verbinden //
if(!$conn){$conn = mysql_connect($this->Server,$this->User,$this->Pass);}
// Verbindung speichern //
$this->conn=&$conn;
}
######### Ende Methode ########
}//Ende klasse
?>
Erklärung:
PHP:
class db1 {
######### Variablen ##########
var $Server = "localhost"; // Mysql Host
var $User = "user"; // Mysql Benutzer
var $Pass = "pw"; // Mysql Passwort
var $DBank = "db"; // Mysql Datenbank
var $erg; //Ergbnismenge
var $anz; //Datensätze
var $ID; //ID eines neu eingefügten Datensatzes
var $affectedrows; //Anzal der betroffenen Datensätze
var $fehler; //letzte Fehlermedung von MySQL
####### Variablen ende ########
Mit
class db1 { wird angezeigt, dass eine Klassendefinition erfolgt. Anschließend werden die Attribute/Variablen der Klasse definiert; Für die Verwendung müssen diese Angaben geändert werden. Der zweite Block der Variablen wird nicht vorbelegt, sondern durch Die Funktionen / Methoden der Klasse gesetzt werden.
PHP:
######## Konstruktor ##########
function db1() {
// Mit dem Server Verbinden //
$this->verbinden();
// Datenbank auswählen //
$select = mysql_select_db($this->DBank,$this->conn);
}
###### Konstruktor ende #######
Diese Funktion ist der Konstruktor der Klasse, da die Funktion den gleichen Namen wie die Klasse trägt. Er wird automatisch beim Erstellen eines neuen Objekts aufgerufen.
In dieser Funktion wird die Funktion
verbinden() dieser Klasse aufgerufen. Wie der Name der Funktion vermuten lässt wird in dieser Funktion die Verbindung der Datenbank erstellt. Dazu erfahren Sie weiter unten mehr. Anschließend wird die zu verwendete Datenbank ausgewählt.
In der Funktion
db_sql() wird der übergebene SQL-String an die Datenbank gesendet und – je nach Ergebnis der Anfrage – werden die Ergebnisse als Array zurückgegeben oder, wenn kein Ergebnis vorliegt,
false. In jedem Fall werden weitere Informationen als Attribute der Klasse gesetzt, z.B. wird bei INSERT der Autozählerwert in
$this->ID geschrieben. Der zweite Parameter
$debug wird genutzt, um im Testbetrieb den MySQL-Fehler und den SQL-String auszugeben
PHP:
### Methode für die Abfrage ###
function db_sql($sql,$debug=0) {
// Anfragen zählen //
static $DBcount;
$this->dbcount=++$DBcount;
// Werte auslesen //
$this->erg=@mysql_query($sql, $this->conn);
$this->anz=@mysql_num_rows($this->erg);
$this->ID=@mysql_insert_id();
$this->affectedrows=@mysql_affected_rows();
// Debug modus : ausgabe des sql codes //
if($debug==1){ echo "<br>".$sql."<br>"; }
Zunächst wird eine Variable der Funktion als
static deklariert. Dies bedeutet, dass der Wert dieser Variable auch wenn das Objekt gelöscht oder die Funktion beendet wird, von PHP im >>Hinterkopf<< behalten wird, und beim nächsten Aufruf der Funktion noch bekannt ist. In diesem Fall wird diese >>Statische Variable<< dazu benutzt, um die Anfragen der Datenbank zu zählen, sodass Sie einen Überblick darüber behalten wie sehr Ihre Website die Datenbank belastet.
Anschließend wird der in
$sql vorliegende SQL-String mit an die Datenbank geschickt. Die Ergebniskennung ist
$this->erg. Alle Nützlichen Informationen über diese Anfrage werden den Attributen der Klasse zurückgewiesen; dabei wird in Kauf genommen, dass einige je nach SQL-Anfrage keine Werte annehmen, z.B. wird ein SELECT-Statement keine Rückgabe bei
mysql_insert_id() ergeben. Da beim Erstellen der Klasse nicht bekannt ist, welche Werte später Sinn machen (wir wissen nicht, welches SQL-Statement übermittelt wird), ermitteln wir alle, um im Zweifelsfall auf die benötigten Informationen über das Objekt zugreifen können. Damit keine Fehlermeldungen ausgegeben werden sind mit des
@-Zeichens vor den MySQL-Funktion unterdrückt.
PHP:
// Elemente in array Schreiben //
if($this->anz > 0) {
for($i=0; $i<$this->anz; $i++){
$back[$i]=mysql_fetch_array($this->erg);
}
}
// Fehlermeldung abfangen und evt. Ausgeben //
elseif(!$this->erg) {
$this->fehler=mysql_error();
if($debug==1){ echo "<br>".$this->fehler."<br>"; }
return FALSE;
}
// Keine Elemente //
elseif($this->anz==0) {
return FALSE;
}
else{ return TRUE; }
return $back;
}
######### Ende Methode ########
Sofern es sich um eine
Select-Anweisung gehandelt hat, deren Ergebnisliste mindestens einen Datensatz enthält, werden die Datensätze in ein Array geschrieben, das am Ende zurückgegeben wird. Sollte ein Fehler aufgetreten oder kein Datensatz in der Ergebnisliste sein wird FALSE zurückgegeben.
PHP:
#### Methode zum Verbinden ###
function verbinden() {
// Evt. Verbindung wieder holen //
static $conn;
// Wenn keine Verbindung vorhanden neu verbinden //
if(!$conn){$conn = mysql_connect($this->Server,$this->User,$this->Pass);}
// Verbindung speichern //
$this->conn=&$conn;
}
######### Ende Methode ########
}//Ende klasse
Die Funktion
verbinden()wird über den Konstruktor aufgerufen. Zunächst wird getestet, ob bereits durch einen vorherigen Aufruf des Objektes oder die Verwendung der Klasse eine Verbindung $conn vorliegt. Sollte dies nicht der Fall sein, wird die Verbindung zur Datenbank hergestellt. Anschließend wird eine Referenz auf diese Verbindung
$conn für diese Klasse über
$this->conn direkt ansprechbar.
Anwendung:
PHP:
// Klasse einbinden //
require_once('inc/class_db.php');
// Neues Objekt //
$db = new db1();
// Sql Code //
$sql = "SELECT * FROM `Tabelle` ORDER BY `ID`;";
// Ausführen //
$result= $db->db_sql($sql);
// Auslesen //
for($i=0; $i<count($result); $i++) {
echo $result[$i]["ID"].": ";
echo $result[$i]["Spalte1"]." - ";
echo $result[$i]["Spalte2"]."<br />";
}
Attribute:
$db->ID ==> Neue ID ( Verfügbar bei INSERT )
$db->affectedrows ==> Betroffene Datensätze ( Verfügbar bei UPDATE )
$db->erg ==> Ergebnismenge ( Verfügbar bei SELECT )
$db->anz ==> Anzahl an Datensätze ( Verfügbar bei SELECT )
$db->dbcount ==> Anzahl aller Anfragen