Die Datenbankklasse PiDatabase

 

 

PiDatabase - Mysql Datenbankklasse

Wer mit Powersite ein Portal erarbeiten will, der wird in der Regel Mysql als Datenbank im Hintergrund nutzen.

Auch da bietet Powersite alles was das Herz begehrt !

Pidatabase ist für Powercms aus dem Grunde entstanden , weil alle herkömmllichen Klassen umständlich im Gebrauch sind, teils auch zu langsam und überwiegend wenig bis nichts machen um Programmierkode einzusparen und es keine Funktionen für Backup und Restore gibt.

Das aber alles kann Pidatabase.

Wenn die Verwendung von Mysql konfiguriert ist verwendet Powersite die Datenbankklasse automatisch.
Die Verbindung steht über die Variable $dbm zur Verfügung.

Wird dabei die Unterstützung von Mysqli erkannt, wird die Datenbankklasse Pidatabase2 geladen ansonsten Pidatabase.

Pidatabase2 unterschiedet sich gegenüber Pidatabase in der Form das die Verwendung von Transaktionen unterstützt wird.
Sollen Transaktionen verwendet werden muss der Datenbanktyp InnoDB zur Anwendung kommen !

Die Datenbankverbindung muss bei Powersite nicht extra geschlossen werden, da eine entsprechende shutdown - Funktion in der index.php deklariert ist wird die Verbindung automatisch beendet.

Wir fangen hier erst einmal an die Klasse Pidatabase zu erklären um dann auf Pidatabase2 zu kommen bzw. um die Unterschiede aufzuzeigen.

Wenn Aufrufbeispiele gezeigt werden stammen diese aus dem Kode von Powercms.

PiDatabase

Diese Klasse ist ausgereift und nicht nur beim Projekt Powercms im Einsatz sondern auch in vioelen Einzelprojekten.

Bei Powersite wird die Verbindung zur Datenbank gemäß Konfiguration der index.php aufgenommen und nur dann wenn es dort konfiguriert ist, wird die Klasse geladen.

Die Klasse besteht aus einigen internen Hilfsfunktionen und normalen Funktionen, aber auch aus einigen wenigen Funktionen praktisch Dummyfunktionen sind, um namentlich eine Umstellung von anderen existierenden Klassen zu erleichtern.

Die Funktionsnamen sind ebenfalls so gewählt worden um die hier zur Verfügung stehenden Funktionen namentlich mit denen anderer Klassen leichter zu identifizeren, auch wenn der Aufruf selbst nicht kompatibel sein muß.

function Connect($host, $user, $password, $database, $prefix)

Das ist die Funktion welche die Verbindung zu Mysql aufnimmt mit den klassischen Parametern host, user, password, database.

Im Gegensatz zu anderen bekannten Klassen ist hier die Verwendung eines Präfixes vorgeschrieben ohne dem keine Verbindng zu Mysql aufgenommen wird.

Das wird bei der Funktion Backup eingesetzt.

function MergeVars($sql, $inputarr=false)

Dieses ist eine interne Funktion.
Sie hat die Aufgabe die im Parameter enthaltenen Fragezeichen gegen Inhalte zu tauschen, die in $inputarr vorhanden sein müssen.

Die Anzahl der Fragezeichen müssen mit der Anzahl der Werte in $inpuarr übereinstimmen !

Beispiel:

$db->Execute("INSERT INTO ".$config['db_prefix']."userprefs (user_id, preference, value) VALUES (?,?,?)", array($userid, $prefname, $value));
Es wird hier die später besprochene Funktion Execute aufgerufen in der intern MergeVars verwendet wird.

function Execute($sql, $inputarr = false,$script='')

Das ist die Standardfunktion zur Ausführung einer Abfrage.

Die Parameter $inputarr und $script sind optional.

Die Rolle von $inputarr wurde bereits bei der Funktion MergeVars besprochen.

Der Paramater $script ermöglicht einem für Debugzwecke zusätzliche Informationen zu speichern, die von der Klasse , wenn sie auf debug gesetzt wurde, in die Variable debugoutput mit gespeichert wird.

Beispiel:

$r=$db->Execute('UPDATE '.$config['db_prefix']."kommentar SET activator =? WHERE id= ?",array($activatecode,$newid),' '.__FILE__.' Line: '.__LINE__.' Fn: '.__FUNCTION__);

Execute gibt entweder false zurück oder das Ergebnis, im einfachsten Fall ein true oder ein Resultset von Mysql.
Zu Debugzwecken wurden unter PHP zur Verfügung stehende Informationen wir Dateinamen (__FILE__), Zeilennnummer (__LINE__) und die Funktion (__FUNCTION__) hinzugefügt.
Es können aber jedwede Informationen dort als Text gesetzt werden.

Der Aufruf von Execute führt aber auch dazu, das einige Variable von Pidatabase mit neuen Informationen versorgt werden.

lasterror enthält die Fehlernummer die bei der Ausführung von Execute aufgetreten ist oder nichts.

lasterrortext enthält die Text des Fehlers die bei der Ausührung von Execute aufgetreten ist oder nichts.

Bei SQL Anweisungen der Art insert,delete,update oder replace wird rows_affected aktualisiert (mysql_affected_rows).

Bei insert und replace wird insert_id aktualisiert, die damit die letzte ID eines eingefügten Datensatzes enthält (mysql_insert_id).

Bei SQL Anweisungen der Art select,explain,show und describe werden die Variablen num_rows (mysql_num_rows) aktualisiert wie auch num_fields (mysql_num_field).

function ServerVersion()

Gibt die Version des Mysql - Servers zurück.

function GetArray($sql, $inputarr = false, $method = 0, $script = '')

Eine der am häufigsten benutzten Funktionen, gibt ein direkt unter PHP nutzbares Array oder false zurück und ist somit für Anweisung der Art SELECT vorgesehen.

Bis auf $sql sind die anderen Parameter optional.
$inputarr ist ja bereits bekannt ebenso $script.

$method hat einen Defaultwert von 0.
GetArray führt die Funktion Execute aus und wenn es ein Ergebnis gibt, dann die interne Funktion Fetch, wobei $method weitergereicht wird.

GetArray gibt das Resultset von Mysql sofort wieder frei.

function GetCol($sql, $inputarr = false, $trim = false, $method = 0)

function GetRow($sql, $inputarr = false, $method = 0,$script='')

Gibt die erste Zeile einer Abfrage zurück - Einsatz somit speziell für SELECT.

function GetOne($sql, $inputarr = false,$script ='')

Alias Funktion von GetRow - gleiche Wirkung.

function SelectLimit($sql, $nrows = -1, $offset = -1, $inputarr = false )

function Exists($sql, $inputarr = false,$script='')

Einsatz zur Bestimmung ob ein Datensatz existiert oder nicht (SELECT), gibt also true oder false zurück , verwendet GetRow.

function Escape($string)

Bearbeitet strings mit mysql_real_escape_string.

function Qstr($string)

Alias - Funktion für Escape.

function IfNull

function Tables()

Gibt alle Tabellennamen der DB als PHP Array wieder, die den bei der Verbindungsaufnahme definierten Präfix aufweisen.

function Fetch($result, $method = 0)

function NumFields($result)

function RecordCount

function Records($sql, $inputarr = false)

function Free($result)

function LastID()

function Ping()

function Close()

function SetCrlf()

function UnixTimeStamp($v)

function DBTimeStamp($timestamp)

function Backup($backupdir,$filename)

Erzeugt ein komplettes Backup aller Tabellen, , die den bei der Verbindungsaufnahme definierten Präfix aufweisen.

Die erzeugte Datei ist reines SQL und kompatibel mit PHPMyadmin 2.8X bis hin zur aktuellen Version von PHPMyAdmin.

Es ist das Verzeichnis zu übergeben ind er die erzeugte Datei abzulegen ist und den Dateinamen selbst.

function Restore($backupdir, $fname)

function Statistik()

function Variables()

function Optimize()

Letzte Änderungen

PowerSite - ein extrem flexibles PHP Framework
Geändert: 04.06.2009
Demo - PlugIn - csv
Geändert: 04.06.2009
Demo Feeds grabben / auslesen
Geändert: 04.06.2009
Bildergalerie (Standard)
Geändert: 04.06.2009
Demo: csv und eMail kombinieren
Geändert: 04.06.2009