Hallo Tom,
Das sollte an dieser Stelle nicht geschehen, aber danke für den Hinweis.
irgendwie habe ich das Gefühl, dass Du ein Rad wiedererfinden willst :-(
Es fehlt da noch diverse Dinge; hier geht es jetzt erstmal nur um das Quoting.
» function db_get_column_info($con, $tablename)
> {
>
> $sql = "select `column_name`, `data_type`
> from `information_schema`.`COLUMNS`
> where `table_name` = '$tablename'";
ein nicht gequoteter Tabellenname. Das kann schief gehen.
Selbstverständlich musst Du den Tabellennamen quoten. Und zwar hier mit mysqli_real_escape_string.
Besser: Verwende wenigstens hier ein Prepared Statement!
Schreibe SQL-Schlüsselwörter groß, das erhöht (für mich)
die Lesbarkeit.
[...]
Hast Du an eine Funktion
function db_escape_schema_object_names()
gedacht?
function db_escape_values($con, $_data)
function db_quote_values($con, $tablename, $_escaped_data)
case 'binary':
case 'varbinary':
case 'tinyblob':
case 'blob':
case 'mediumblob':
case 'longblob':# no quoting
Wenn Du den Kram in eine SQL-Zeichenkette bringst, dann musst Du das selbstverständlich
a) in einfache Anführungszeichen packen
b) entsprechend quoten
und
c) daran denken, dass Du die max_packet_size überschreiten könntest.
Abschließende Frage:
Nur weil der Datentyp einer Spalte anders definiert ist, schließt das nicht die Möglichkeit aus, dass jemand anderes böswillig oder versehentlich Daten eines anderen Datentyps versucht einzugeben. Mache Dir bitte klar, wie das resultierende SQL-Statement aussehen *kann*.
Freundliche Grüße
Vinzenz