PHP - PDO & Prepared Statements

darksider3

dark-Linux-sider
Hallo,
ich versuche grade herauszufinden, inwiefern Prepared Statements so "toll" sind, im speziellen von PDO(MySQL).
Leider komme ich nicht darauf, denn in so manchen Foren streiten die sich darüber was besser ist.
Nunja, das einzige was man daraus nun bisher ziehen konnte war:
Ich kann verschiedene Anfragen, welche Häufig genutzt werden, speichern und verbrauche dadurch weniger Rechenzeit.
Wie seht ihr das? Hab ich dass jetzt vollkommen falsch verstanden, oder habe ich schon den richtigen Ansatz?

MfG
Darksider3
 
Hi

das ist richtig.

Wenn eine Abfrage oft ausgeführt wird und dabei immer nur
zB. eine Zahl in einer Where-Klausel anders ist
ist ein nicht kleiner Teil der Verarbeitung auf DB-Seite immer gleich,
unabhängig von der Zahl.

Wenn man in PHP die Zahl als Variable in den String einsetzt
und immer wieder eine normale Query ausführt
muss immer die ganze Arbeit gemacht werden.

Mit den Prep.Stat. sagt man der DB
"Hier ist die Abfrage, und beim ? kommt später noch eine Zahl rein"
Die ganze Vorarbeit, die ohne dem Wert selbst möglich ist, kann dann
genau einmal am Anfang gemacht werden.
Parsen der SQL-Anweisung, Filtern nach weiteren (eventuell vorhandenen)
Where-Bedingungen usw.

Dann kann man für die eigentliche Ausführung die Zahl nachreichen,
und die DB den verbliebenen Rest der Arbeit machen lassen.
Vorteil ist eben, dass bei mehrmaliger Ausführung Rechenzeit (und auch Traffic) gespart wird,
weil die ganze Vorarbeit beim zweiten, dritten... Mal wegfällt.


Ein weiterer Nebeneffekt ist die automatische Absicherung gegen SQL-Injections,
man kann das also nicht vergessen und damit Sicherheitslücken haben.
(Die nachgereichten Werte werden wirklich nur als Werte genommen
und nicht mehr SQL-mäßig geparst. Anführungszeichen etc. machen also nichts.)


Wenn man von Anfang an vorhat, die Abfrage nur einmal auszuführen,
sollte man geschwindigkeitsmäßig auf PS verzichten.
Es bleibt zwar der SQL-Injection-Schutz,
aber verglichen zu einer ganz Normalen Abfrage ist der erste
PS-Durchgang (meistens) etwas langsamer.
Lohnt sich nur bei mehreren Durchgängen.


Noch was:
Wenn man jetzt sagt, statt
SQL:
WHERE x=1
...
WHERE x=4
...
WHERE x=7
in drei Abfrage könnte man doch einfach ein
SQL:
WHERE x in (1,4,7)
machen. Stimmt.
Aber je nach Situation geht das nicht immer.
Es könnte SQL-mäßig einfach nicht möglich sein, was man vorhat;
es könnte sein, dass man nicht alle Werte sofort hat, sondern erst nach und nach bekommt,
oder die Rein-SQL-Löung könnte uU. auch langsamer sein als PHP + mehrere Abfragen.
 
Nicht vergessen sollte man auch die einheitliche, gut dokumentierte, kompromisslose API - ist bei PHP ja net selbstverständlich :p

Edit: Und natürlich, dass nicht nur MySQL als RDBMS verwendet werden kann...
 
Zurück