Hi.
Meine Vorgehensweise wäre, eine DB-Klasse zu erstellen, die irgendwie die Zugangsdaten bekommt und eine Methode bereitstellt, mit der man SQL-Statements ausführen und eine Ergebnismenge zurückbekommen kann. Das heißt, am Ende hat sie eine öffentliche Methode (plus gegebenenfalls Zugangsdatenübergabe). Man übergibt das vollständige SQL-Statement oder eins mit Platzhaltern zuzüglich der Werte. Alles weitere passiert intern. Die Methode kann sogar statisch sein, wenn keine weiteren öffentlichen Hilfsmethoden benötigt werden.
Also etwa so?:
class db{
var $host;
var $name;
var $pw;
var $dbname;
private static $instance = NULL;
privat function __construct(){}
public function getValues($host,$name,$pw,$dbname){
$this->$host=$host;
// usw..
}
// Zur DB connecten
function dbconnect(){}
// Singleton
public static function getInstance() {}
// Klonen verbieten.
private function __clone() {}
public function prepare_bind_execute_stmt($sql,$thevalues){}
}
Ich denke so meintest du das nicht oder?
»» Ich will das performante&sichere.
Performanter dürfte sein, auf (mysqli-) P.S. zu verzichten, wenn SQL-Statements erst noch zusammengebaut werden müssen und wenn Ergebnisse mit unterschiedlichen Spaltenanzahlen abgeholt werden müssen. Die Sicherheit lässt sich mit Maskieren erreichen.
Jetzt zweifel ich ob ich überhaupt umsteigen soll von MySQL auf Improved.
»» Ich verstehe nicht den Unterschied zwischen MySQLi_stmt und normalem MySQli oder isses beide das gleiche?
Es gibt drei Klassen innerhalb der mysqli-Extension: mysqli, mysqli_stmt und mysqli_result. (Die vierte (mysqli_driver) ist uninteressant.) Eine mysqli-Klasse brauchst du immer. mysqli_result bekommst du als Ergebnis eines mysqli::query(). und mysqli::prepare() liefert dir ein mysqli_stmt-Objekt, an das du deine Parameter- und Result-Variablen binden musst sowie execute() und fetch() aufrufst. Wenn dir das soweit noch nicht klar ist, übe doch erst einmal den Umgang mit der mysqli-Extension, bevor du eine DB-API drumherum entwickelst.
Danke, da blick ich durch =).
Multi-Querys sind noch mal eine Kategorie für sich. Da kommen dann noch weitere Herausforderungen auf dich zu, wie der Umgang mit mehreren Resultsets.
Ich will halt z.b. einen Eintrag "User, Password" machen und direkt im Anschluss die durch die auto_increment erzeugte Spalte "id" auslesen.
Also bei mir wären das eigendlich zwei Querys. Dank Mulitqueries nicht mehr.
Schneller können P.S. nur sein, wenn man sie so verwendet, wie vorgesehen.
Das wäre ganz klipp und klar wenn ich sie wie verwende?
»» Wo liegt denn dann der Unterschied zwischen Singleton P. und eine public static Methode? Letzteres ist sicherer aufgrund des Public Sichtbarkeitsmodofizierer?
Eine statische Methode ist eine Methode einer Klasse, die ohne Instanz aufgerufen werden kann. Das Singleton Pattern ist mehr, es nutzt aber eine statische Methode, um seine Aufgabe zu erfüllen. Zunächst muss der Konstruktor private sein, damit keine Instanz direkt erzeugt werden kann. Neben der statischen öffentlichen Methode gibt es noch eine statische und private Eigenschaft, in der die Instanz geparkt wird, wenn sie bei der ersten Anforderung erzeugt wird. Anforderungen kommen immer über die statische Methode. Die gibt die geparkte Instant raus und instantiiert beim Erstaufruf vorher diese Instanz und legt sie in der statischen Eigenschaft ab. Wie das als Code aussieht ist im PHP-Handbuch zu sehen: Singleton Pattern.
Danke, auch verstanden =).
Ich komme hiermit nochmal auf
Meine Vorgehensweise wäre[...]
zurück. Wie sähe die im Gesamtbild aus?
Es gibt immer noch 3 Klassen bei mir.
Tools, DBMS_Connection, DBMS_functions
so in etwa.
Tools werden die Methoden static?
DBMS_Connection wird Singleton und DBMS_functions wieder alles static?
Ich brauche alles 3 fast immer, sprich sie alle drei müssen für alle Methoden und Klassen verfügbarstehen. Mit Singleton, das ist mir nun klar.
Wie ich das mit den beiden anderen handhabe noch nicht ganz.
Liebe Grüße,
Chris