Rolf b: PHP SQL Statements

Beitrag lesen

Ob Du nun die Strings manuell verkettest oder den Stringparser von PHP nutzt, macht sicher wenig Unterschied. Ich traue dem Burschen sogar zu, dass er die Variablenreferenzen in deinem ersten Beispiel im Stringliteral erkennt und automagisch zur Concatenation compiliert.

Ein Massen-Insert wird hier aber nicht die Zeit verlieren. Die Wartezeit auf den SQL-Server ist um Größenordnungen länger. Unter diesem Aspekt ist es komplett egal, wie du das SQL aufbaust.

Viel wichtiger ist aber dies: Was Du da vorlegst, solltest Du so keinesfalls tun.

Es ist obsolet, veraltet, oder deprecated, kann man nennen wie man will. Man baut kein SQL mit Daten zusammen, wenn es sich vermeiden lässt! Unvermeidbar war es mit der mysql-Extension von PHP, aber mit mysqli oder PDO hast Du die Möglichkeit, prepared statements zu nutzen und SQL-Parameter zu definieren. Pro INSERT änderst Du dann lediglich die Parameterwerte und schickst das gleiche Statement nochmal los. Um Altlasten wie Parameter-Escaping brauchst Du Dich dann auch nicht zu kümmern, das erledigt der SQL Treiber für Dich.

Schau es Dir in der PHP Doku mal an. MYSQLI verwendet Fragezeichen als Parametermarker, da musst Du dann aufpassen wie Du die Parameter zuordnest. PDO kennt benannte Parameter. Was NICHT geht, sind Tabellen- und Spaltennamen als SQL Parameter (zumindest nicht unter MS SQL Server, mit dem ich arbeite). D.h. den strukturellen SQL Teil wirst Du Dir nach wie vor zur Laufzeit konstruieren müssen, wenn Du aus prinzipiellen Gründen kein statisches SQL nutzen kannst. Aber die Inhalte gehören in SQL Parameter.

Falls Du Dir ein ORM Framework zusammenbastelst: Kann man machen, muss man aber nicht. Dafür gibt's fertige Lösungen. Die cachen dann auch ihre prepared Statements und erzeugen sie nicht für jeden INSERT oder UPDATE neu, was die Frage nach der Effizienz der SQL Generierung komplett obsolet macht...

Rolf