Huhu,
ich bin grade dabei Tests für ein Projekt von mir zu schreiben. Dabei schlug ein Test widererwarten Fehl. Bei dem Test wird versucht ein ungültigen Wert in die DB zu schreiben und es wird eine entsprechende Fehlermeldung der Datenbank erwartet. Das Feld 'email' in der DB ist auf UNIQUE und NOT NULL gesetzt. Trotzdem gelingt der Versuch per UPDATE ein NULL in das Feld 'email' zu setzten. Beim INSERT bricht die DB wie zu erwarten mit einem Fehler ab, wenn ich dies versuche. Habs auch per Konsole direkt händisch am SQL Server versucht, und der UPDATE Befehl geht durch. Liegt also nicht an dem PHP Code.
Klar, wird eine Eingabe NULL im Betrieb des Projektes durch einen Validator vorher abgefangen, nur sollte sich trotzdem die Datenbank nicht so verhalten oder?
Habe schon gegooglet und auch in der Doku von MariaDB zu dem Thema NULL und NOT NULL gelesen. Fand aber nichts, was dies anspricht.
Liebe Grüße
ich bin grade dabei Tests für ein Projekt von mir zu schreiben. Dabei schlug ein Test widererwarten Fehl. Bei dem Test wird versucht ein ungültigen Wert in die DB zu schreiben und es wird eine entsprechende Fehlermeldung der Datenbank erwartet. Das Feld 'email' in der DB ist auf UNIQUE und NOT NULL gesetzt. Trotzdem gelingt der Versuch per UPDATE ein NULL in das Feld 'email' zu setzten. Beim INSERT bricht die DB wie zu erwarten mit einem Fehler ab, wenn ich dies versuche. Habs auch per Konsole direkt händisch am SQL Server versucht, und der UPDATE Befehl geht durch. Liegt also nicht an dem PHP Code.
Klar, wird eine Eingabe NULL im Betrieb des Projektes durch einen Validator vorher abgefangen, nur sollte sich trotzdem die Datenbank nicht so verhalten oder?
Code:
CREATE TABLE IF NOT EXISTS `users` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `email` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, `group` INT UNSIGNED NOT NULL DEFAULT 4, `is_active` TINYINT UNSIGNED NOT NULL DEFAULT 0, `registrationToken` VARCHAR(64) NULL DEFAULT NULL, `resetToken` VARCHAR(64) NULL DEFAULT NULL, `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `changed_at` TIMESTAMP NULL DEFAULT NULL, `deleted_at` TIMESTAMP NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `email_uidx` (`email` ASC), INDEX `group_idx` (`group` ASC), INDEX `created_idx` (`created_at` ASC), CONSTRAINT `group` FOREIGN KEY (`group`) REFERENCES `groups` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE) ENGINE = InnoDB;
Code:
UPDATE users SET email=NULL WHERE id=4;
Liebe Grüße
Kommentar