dedlfix: Datenbank Verständnisfrage beim beschreiben

Beitrag lesen

echo $begrüßung;

Ich habe DB Tabelle User mit ca. 50 Spalten. (Username, Passwort, Geschlecht, Geburtsdatum, Rechte, Bild, Avatar, Fontfarbe, Schriftart, Profilangaben, MitgliedSeit, usw. usw.)
Beim registrieren sieht die Query (Insert Into) übel aus (Lang und unübersichtlich)

Wenn das Programm erst einmal steht bekommt es kein Mensch mehr mit, was hinter den Kulissen läuft.

Meine Frage nun. Manche Spalten sind "Not Null" und haben einen Standartwert drin. Sollte ich nun andere Spalten updaten oder einen neuen Datensatz anlegen, ohne diese Spalten mitupzudaten oder in der Query zu erwähnen, würde das kein Problem machen ne?

(Standard mit d am Ende.) Einzelne Spalten upzudaten ist überhaupt kein Problem.

Spalte Test typ varchar.
Muss ich in der Query die Spalte immer maskieren? 'mein Eintrag'\

Generell gilt: Jeder Wert, der in einen bestimmten Kontext gebracht werden soll, muss die Gegebenheiten dieses Kontexts beachten und entsprechend behandelt werden.
Du hast hier ein SQL-Statement. Das hat die Eigenart, Anweisungsteile und Daten zu einem einzigen Text zusammenzumischen. Damit die Daten von den Anweisungen unterschieden werdne können, muss man sie besonders kennzeichnen. Hier erfolgt das durch Quotierung, also Einrahmen in " oder '. Wenn nun innerhalb des Wertes ein ' oder " auftaucht, wird das als Ende des Wertes gedeutet, was ja aber nicht sein soll. Deshalb muss man diese Zeichen mit besonderer Bedeutung maskieren. Man stellt ihnen in dem Fall ein \ davor. Damit ist auch der \ zu einem Sonderzeichen geworden, das ebenfalls beachtet werden muss. Es gibt noch ein paar weitere Zeichen. Alle zu maskierende Zeichen werden von mysql_real_escape_string() beachtet. (Ich gehe mal davon aus, dass du MySQL verwendest.) Diese Funktion gibt es mit gleichem Namen unter PHP. Und auch andere Systeme bieten solch eine Funktion an.

Würde die Eintragung ohne Maskierung trotzdem stattfinden?

Nein, das ergibt im günstigsten Fall einen Syntaxfehler, im ungünstigsten eine SQL-Injection.

Bei einem INT kann man natürlich nicht maskieren, sonst findet keine Eintragung statt.

Doch, man kann. MySQL ist es egal, ob es Zahlenwerte als String gekennzeichnet oder ohne Quotierung bekommt. Da der SQL-String immer Text ist, muss in jedem Fall eine Konvertierung in eine Zahl erfolgen, bevor der Wert gespeichert werden kann.

Bei Date und Time müsste man wahrscheinlich auch maskieren.

Ja.

Geht dann die ganze Query (INSERT INTO oder UPDATE) in die Hose wenn eine Maskierung nicht passt oder nur die jeweilige Spalte?

Bei einem Syntaxfehler wird das SQL-Statement nicht ausgeführt. Bei einer SQL-Injection geht noch mehr in die Hose als dir lieb ist.

Setz dir doch am besten ein Testsystem auf. Daran kannst du solche Problemfälle nachstellen, ohne Angst zu haben, etwas kaputt zu machen, siehst wie sich das System verhält und lernst damit umzugehen.

echo "$verabschiedung $name";