joschilein
Multitalent
- 5 Mai 2006
- 1.393
- 151
Ein Array enthält alle Variablen, die gleich an im Zusammenhang mit einem vorbereiteten Query an die Datenbank gesendet werden sollen. Die Keys sind dabei die Spaltennamen und die Values die einzutragenden Werte.
Auf SQL-Injections etc ist natürlich geprüft. Nun kann es aber sein, dass ein Wert zu lang ist und die in der DB definierte Länge überschreitet. Hauptgrund könnte sein, dass bestimmte Spalten verschlüsselt gespeichert werden sollen und durch die Verschlüsselung und die verwendeten Schlüssel nicht völlig klar ist, welche Länge die Ausgabe haben soll.
Ich überlege mir nun, was wohl die beste Lösung wäre.
Problem bei 3: Es ist dann zwar nichts verloren, aber um die Daten später einfach und schnell verarbeiten zu können, müssten sie ja eh irgendwann in einem längeren Feld in der selben Tabelle stehen.
Problem bei 2: Die Zugriffsrechte für den MySQL-Benutzer könnten gerade bei ALTER eingeschränkt sein. Das ist zwar aktuell nicht das Problem, gilt es aber im Hinterkopf zu behalten.
Problem bei 1: Ja hmm. Wie sinnvoll ist es mehrere Felder als Text zu definieren und sie dann nur für maximal ein paar hundert Zeichen zu verwenden?
Vermutlich ist 1 am sinnvollsten, 2 geht mir aber auch nicht aus dem Kopf
Auf SQL-Injections etc ist natürlich geprüft. Nun kann es aber sein, dass ein Wert zu lang ist und die in der DB definierte Länge überschreitet. Hauptgrund könnte sein, dass bestimmte Spalten verschlüsselt gespeichert werden sollen und durch die Verschlüsselung und die verwendeten Schlüssel nicht völlig klar ist, welche Länge die Ausgabe haben soll.
Ich überlege mir nun, was wohl die beste Lösung wäre.
- Feldlänge schon vorher vergrößern (aktuell varchar(200) wo nur knapp 100-150 Zeichen erwartet werden) oder gleich auf Text setzen
- Feldlänge dynamisch erweitern, wenn es nötig wird. Vor der Datenzusammenstellung wird eh SHOW COLOUMS ausgeführt. Daraus ließe sich auch ein ALTER TABLE vor den eigentlichen INSERT basteln.
- Überlange Felder abfangen und alternativ speichern, z.B. als CSV (mit eigenen Mehrzeichen-Feldtrennern) o.ä.
Problem bei 3: Es ist dann zwar nichts verloren, aber um die Daten später einfach und schnell verarbeiten zu können, müssten sie ja eh irgendwann in einem längeren Feld in der selben Tabelle stehen.
Problem bei 2: Die Zugriffsrechte für den MySQL-Benutzer könnten gerade bei ALTER eingeschränkt sein. Das ist zwar aktuell nicht das Problem, gilt es aber im Hinterkopf zu behalten.
Problem bei 1: Ja hmm. Wie sinnvoll ist es mehrere Felder als Text zu definieren und sie dann nur für maximal ein paar hundert Zeichen zu verwenden?
Vermutlich ist 1 am sinnvollsten, 2 geht mir aber auch nicht aus dem Kopf