[VMS2.x]Besser strukturierte Queries
Ich bin gestern auf einen alten Thread im Designerscripte-Forum gestoßen, der sich mit db_query() befasst.
http://www.designerscripte.net/showthread.php/22043-db_query-funktion-richtig-nutzen
Ich finde die Art der Schreibweise etwas übersichtlicher als die mit Variablen direkt im Query, allerdings wird das bei großen Queries auch wieder unübersichtlich durch die Notation:
Beispiel bisher:
$sql = db_query("SELECT *
FROM " . $db_prefix . "_kontodaten
WHERE " . $_SESSION['uid'] . " = 1;");
Beispiel, wie es mit Platzhaltern aussieht:
$sql = db_query("SELECT *
FROM %s_kontodaten
WHERE %d = 1;",
$db_prefix,
$_SESSION['uid']);
Allerdings bei sowas hier
$sql = db_query("SELECT *
FROM %s_kontodaten
WHERE %d = 1
OR %2\$d = 2
OR %2\$d = 5;",
$db_prefix,
$_SESSION['uid']);
oder noch mehr Platzhaltern wird es mega unübersichtlich... Zudem werden Strings nicht mit '' escaped (blabla und nicht 'blabla').
Ich würde mir wünschen, dass man die db_query so umschreibt, dass Strings im Query automatisch escaped werden und man Platzhaltern einfache Namen geben kann wie in Python:
prefix = """vms"""
uid = 1
stmt = """SELECT *
FROM %(_pfx_)s_kontodaten
WHERE %(_id_)d = 1
OR %(_id_)d = 2
OR %(_id_)d = 5;""" % {"_pfx_": prefix, "_id_": uid}
In PHP (theoretisch):
$sql = db_query("SELECT *
FROM %(pfx)s_kontodaten
WHERE %(uid)d = 1
OR %(uid)d = 2
OR %(uid)d = 5;",
[
"pfx" => $db_prefix,
"uid" => $_SESSION['uid']
]);
Damit wären dann auch lange Queries gut lesbar und man hätte nicht immer diesen Mix aus Query und Variablen. Allerdings müsste man dann vielleicht noch ein Flag kreieren, dass einen String nicht automatisch escaped.
Sonst wäre die FROM-Zeile im obigen Beispiel ungültig, da "FROM 'vms'_kontodaten" ja keine korrekte Anweisung ist. Aber so die Standardidee sollte doch eigentlich gut umsetzbar sein oder wird es für v2.5.x keine Neuerungen mehr geben?