Welche Tokens können in vorbereiteten PDO-Anweisungen parametrisiert werden?

8

Ich spiele mit vorgefertigten Anweisungen in PHP / PDO herum. Die grundlegenden Abfragen funktionieren einwandfrei und übergeben einen Wert an die WHERE-Klausel:

%Vor%

Ich habe jedoch eine Situation, in der ich Variablen für die Feldnamen übergeben muss. Diese Abfrage (mit entsprechender Bindung) funktioniert gut:

%Vor%

Dieser gibt einen Fehler:

%Vor%

Dieser gibt keinen Fehler, gibt aber keine Zeilen zurück:

%Vor%

Also, welche Dinge sollten in vorbereiteten Aussagen funktionieren? Kann ich Feldnamen, Tabellennamen usw. "parametrisieren"?

    
DisgruntledGoat 25.10.2009, 23:52
quelle

3 Antworten

10

Sie können Tabellennamen, Spaltennamen oder irgendetwas in einer IN -Klausel nicht parametrisieren (dank c0r0ner für Aufzeigen der IN -Klausel-Einschränkung ).

Siehe diese Frage , und Anschließend diesen Kommentar im PHP-Handbuch .

    
Josh Leitzel 25.10.2009, 23:54
quelle
1

@Josh Leitzel

Dieses Denken ist sehr restriktiv (und ist meiner Meinung nach nur eine Entschuldigung dafür, zu faul zu sein, eine robuste Lösung zu implementieren), insbesondere für dynamische Baumstrukturen, die in einer Datenbank ausgedrückt werden.

Betrachten Sie das folgende Beispiel:

Mein Projekt hat eine logische Struktur:

Eine Unternehmenshierarchie wird in Entitäten ausgedrückt. Jede Entität kann im Allgemeinen als Mitglied der Hierarchie oder als Mitglied einer bestimmten Hierarchieebene behandelt werden. Die Hierarchie selbst ist in einer Tabelle wie folgt als einzelner Baumzweig definiert:

%Vor%

und die Entitäten selbst werden ausgedrückt als:

%Vor%

Um die Benutzung zu vereinfachen, habe ich einen Algorithmus erstellt, der eine flache Ansicht des Baumes erzeugt. Das folgende konkrete Beispiel veranschaulicht, was ich meine:

%Vor%

Dies würde dazu führen, dass die folgende flache Darstellung erzeugt wird:

%Vor%

Entitäten, die sich auf der Divisionsebene befinden, hätten division_id, area_id und store_id als NULL, einen Bereich area_id und store_id als NULL usw.

Das Schöne daran ist, dass Sie alle Kinder einer Abteilung mit einer ähnlichen Aussage wie folgt abfragen können:

%Vor%

Dies setzt jedoch voraus, dass ich die Strukturebene der Entität kenne, die ich abfrage. Es wäre schön zu tun:

%Vor%

Ich weiß, dass es nicht schwierig ist, die Strukturebene einer einzelnen Entität herauszufinden, sondern gehe davon aus, dass ich eine Sammlung von Entitäten durchlaufen habe, die möglicherweise nicht alle auf derselben Ebene sind. Wie es jetzt ist, muss ich eine separate Abfrage für jede Ebene der Hierarchie erstellen, aber wenn ich Felder parametrieren könnte, könnte ich Folgendes tun:

%Vor%

Ergebnis sauberer Code und nur eine vorbereitete Aussage.

Das gesamte Beispiel verwendet keinerlei Benutzereingabe.

Nur etwas zu beachten.

    
Philip 27.10.2009 00:44
quelle
1

Sie können auch nichts in IN clause parametrisieren.

    
Sigurd 27.10.2009 11:47
quelle

Tags und Links