Hallo,
Hier habe ich dann von der nativen Funktion escapeString gelesen. Die ist jetzt so nett und macht aus ' ein ". Und was, wenn der User jetzt Lil' John heisst?
Allerdings: was soll daran jetzt sicher sein?
Das einfache Anführungszeichen begrenzt in SQL Zeichenketten. Doppelte Anführungszeichen begrenzen in SQL normalerweise *keine* Zeichenketten, sondern Bezeichner wie zum Beispiel Tabellen- oder Spaltennamen. MySQL in der Standardkonfiguration macht etliche Ausnahme vom SQL-Standard.
der query für die Funktion wird gebastelt aus zwei Arrays
$keys und $vals
:
sowas:
$query_keys = " (".implode(",", $keys).")";
$query_vals = " VALUES(".implode(" , ", $vals).")";
$query = "INSERT INTO '$table'".$query_keys.$query_vals;
solltest Du \*nicht\* machen :-)
a) Dein SQL-Statement ist syntaktisch nicht korrekt.
Wenn Du den Tabellennamen in Anführungszeichen packst, dann in
doppelte Anführungszeichen (ANSI-Quotes).
b) Gleiches gilt für Deine Spaltennamen, die Du \*hmmm\* etwas ungewöhnlich
als "keys" bezeichnest.
c) Die Spalteninhalte sind mit [escapeString](http://www.php.net/manual/de/sqlite3.escapestring.php) zu behandeln.
Dein Code sieht \*keine\* Begrenzer für Deine Werte vor.
Bei Zeichenketten benötigst Du zwingend das einfache Anführungszeichen
als Begrenzer. Nein, dieses Begrenzerzeichen ist \*nicht\* Bestandteil
des Wertes.
Bei NULL darfst Du keine Begrenzer verwenden.
Fazit:
So einfach kannst Du Dir nicht eine Funktion zusammenstricken, die ein
beliebiges INSERT-Statement erzeugt.
Ich fürchte, Du hast dedlfix' Kontextwechselartikel noch nicht so recht verstanden :-(
Freundliche Grüße
Vinzenz