Rolf B: PHP Oop Datenbank Klasse

Beitrag lesen

Hallo j4nk3y,

ständiges Neuerstellen eines mysqli Handles ist ein Problem, oder auch nicht. Es gilt bei manchen sogar als good practice, eine DB-Connection wie eine heiße Kartoffel zu behandeln: Schnappen, kurz halten, fallenlassen. Dafür wird aber implizit vorausgesetzt, dass die Datenbankanbindung Connection Pooling betreibt, d.h. nicht jedes new mysqli() erzeugt physisch eine neue Connection, sondern es wird eine existierende Connection aus dem Pool wiederverwendet. Das kannst Du in mysqli aktivieren (siehe hier). Ohne das Connection Pooling würde tatsächlich immer eine neue physische Connection hergestellt, das kostet Zeit.

Das Array bei call_user_func_array ersetzt die einzelnen Parameter, die call_user_func bekäme. Wichtig ist hier, dass das Array ab der zweiten Position Referenzen auf Variablen enthält (siehe hier, 2. Note). Mir wäre unbekannt, dass die Array-Einträge besondere Schlüssel bräuchten, die Zuordnung zu Parametern erfolgt in der Reihenfolge, wie die Einträge ins Array gekommen sind. Werte einzutragen, wie Du es gemacht hast, funktioniert nicht. Man kann SQL-Parameter nur an Variablen binden. Sinn ist, dass Du das einmal tust und dann pro Aufruf des SQL-Statements die Variablenwerte änderst.

Aber - vergiss die von Dir verlinkte Klasse für produktive Aufgaben, sie ist schlecht gemacht.

  • Parameterbindung und Statementausführung muss trennbar sein, sonst erfüllt die Binderei nur die Hälfte ihres Zwecks (Zweck 1: Escapen der Werte vermeiden, Zweck 2: Der Server bekommt das Statement nur einmal und muss es nur einmal optimieren, danach kann man es N mal benutzen)
  • Einen Connect zu machen und dann nicht zu disconnecten führt zu einer Menge "vergessener" Datenbank-Handles. Wenn man pro Statement neu connected, dann muss man auch pro Statement disconnecten

Rolf

--
sumpsi - posui - clusi