Boolean-Werte in der Datenbank

Ideen für neue Funktionen in CONTENIDO?
Antworten
bodil
Beiträge: 269
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Boolean-Werte in der Datenbank

Beitrag von bodil » Mo 11. Apr 2022, 15:40

Ich habe da noch einen Wunsch für zukünftige Versionen von Contenido.
PHP wird zunehmend intolleranter gegenüber Zugriff auf nichtgesetzte Variablen. Das betrifft den aktuellen Quellcode an vielen Punkten (»if($contenido) { ... }« wird dann ggf. zu einem Fatal Error führen.) Da stehen noch viele Umbauten an. Mir wäre es wichtig, dass wir in diesem Zusammenhang auch in der Datenbank eindeutiger werden. Viele Datenbankfelder werden als Boolean genutzt, das Format ist dann tinyint(1), eine '1' bedeutet true, eine '0' steht für false. Per default sind diese Felder aber leer. Mein Wunsch wäre, dass diese Felder künftig als Defaultwert eine '0' (Null) bekommen.
Vielen Dank für eure Aufmerksamkeit!
Bodil

Faar
Beiträge: 1801
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Boolean-Werte in der Datenbank

Beitrag von Faar » Mo 11. Apr 2022, 16:39

Hallo Bodil,
ja, PHP 8 wirft ein paar Fragen auf, mit denen auch recht viele andere Systeme zu kämpfen haben.
Aber was nicht gesetzte Variablen angeht, programmiere ich mit if (isset($var) ) anstelle von if ($var).
Das wirft dann keinen Fehler aus, weil es prüft, ob die Variable existiert und sich von NULL unterscheidet.

Hier kommen wir zu einer ganz wichtigen Unterscheidung: 0 ist nicht NULL
Die Zahl 0 ist ein Wert, die Variable mit dem Wert 0 würde existieren.
0 wäre also nicht false bei if($var).
NULL ist kein Wert, wenn einer Variablen $var = NULL zugewiesen wird, enthält sie keinen Wert mehr und bei der Frage nach isset($var) würde false heraus kommen und bei if($var) folglich eine Fehlermedlung, weil sie nicht gesetzt ist.
https://www.php.net/manual/de/function.isset.php

Achtung, Konstanten werden anders geprüft, ob sie gesetzt sind.
Darum finden wir im Contenido Programm oft und häufig if(!defined($CONTENIDO)) , da dies eine Konstante ist.

Edit: Bei SQL in der DB ist auch zu beachten, dass eine 0 oder ein Leerzeichen nicht NULL sind.
NULL ist nichts, also eine leere Tabellenzelle, wogegen Leerzeichen und 0 ein Inhalt sind.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten