dedlfix: mehrere neue Einträge in MySQL-Datenbank machen - Anzhal unbek.

Beitrag lesen

Hi!

Ich möchte mehrere Einträge (Zeilen) über "INSERT" in eine MySQL-Datenbank machen, weiß aber vorher nur, dass es zwischen einem und 40 Einträgen sein werden. Die exakte Zahl legt der Benutzer des Formulars fest.

Legt er die Zahl explizit fest oder ergibt sie sich beispielsweise aus der Anzahl ausgefüller oder Felder? Ihre Zahl ist nicht wichtig, aber die Art, wie die Daten übergeben werden (sollen).

Die mit Post übergebenen Werte sind durchnummeriert wie im Beispiel, so dass es vielleicht über ein Schleife gehen könnte, allerdings komme ich im Moment einfach nicht drauf, mir fehlt immer wieder eine Kleinigkeit...

Durchnummeriert als foo1, foo2, ... oder als foo[1], foo[2], ...?

Da ich jetzt aber nicht weiß wie viele Datensätze im konkreten Fall eingetragen werden sollen ich aber auch nicht eine Unmenge an leeren Datensätzen erzeugen will hilft es auch nicht, einfach alle Werte zu übergeben?

Auf ein clientseitiges Anpassen der gesendeten Werte würde ich nicht nicht verlassen wollen. Das eintragende Script sollte prüfen, ob alle Daten vorhanden sind und welche aufgrund bestimmter Merkmale nicht bearbeitet werden sollen.

Wäre es vielleicht eine, wenn auch unelegante, Lösung, wenn einer der Werte in der Datenbank erzwungen ist und nicht = '' sein darf? Würde dann die Übertragung ohne Fehlermeldung abgebrochen und es würden nur die wirklichen Datensätze eingetragen?

Das kommt zum einen auf die Constraints der Felder an. Da bist du aber auf NULL vs. NOT NULL und UNIQUE-Werte über die gesamte Tabelle beschränkt. Ein Trigger lässt sich zur Überprüfung nicht verwenden, höchstens missbrauchen, weil es keine gescheite Art gibt, selbst einen Fehler auszulösen.
Bei Leerstrings aus dem Formular kommt noch hinzu, dass du da nicht automatisch auf NULL kommst, das also händisch prüfen musst und dann auch gleich dabei die Verarbeitung verhindern kannst.

Zum anderen kommt es auf die Formulierung des INSERT-Statements an. Die Möglichkeiten, das Verhalten über diverse Schlüsselwörter (z.B. IGNORE) zu steuern, findest du im MySQL-Handbuch. Du musst dabei aber im Auge behalten, was für dich in welchem (Fehler-)Fall die geeignetste Reaktion ist.

Wo genau ist denn das Problem angesiedelt? Fehlt es an einer Idee, wie die Benutzer-Daten im Script erkannt werden können, wie deren Inhalt zwischen gewünscht und nicht gewünscht unterschieden werden kann, an der Formulierung eines Multi-Insert-SQL-Statements mit unterschiedlich langer Datensatzanzahl oder der Formulierung einer Schleife mit einzelnen Insert-Statements?

Lo!