Sönke Tesch: Wie NULL Werte in MySQL erzeugen?

Beitrag lesen

ich möchte wenn eine bestimmte PHP-Variable leer ist, in die MySQL-DB dafür einen NULL-Wert setzen und nicht etwa einen leeren String eintragen. Wenn die Variable aber leer ist, wird immer ein leerer String statt eines NULL-Wertes eingetragen. Wie läßt sich so was machen?

Indem Du das Wörtchen NULL (_ohne_ Anführungszeichen) statt eines Textes oder einer Zahl angibst, also statt

update tabelle set ein_text="Hallo Welt", eine_zahl=23

einfach

update tabelle set ein_text=null, eine_zahl=null

Gleiches natürlich für insert.

Aus PHP heraus kannst Du diesen Befehlstext aber nicht mehr einfach mit den jeweiligen PHP-Variablen zusammenpappen; Du mußt explizit prüfen, ob eine Variable NULL ist. Da das etwas aufwendig ist, nimmst Du am besten eine Funktion zur Hand:

function varklebe($variable, $numerisch = false) {
      if ($variable === null)
          return "null";
      else if ($numerisch)
          return intval($variable);
      else
          return '"'.mysql_escape_string($variable).'"';
  }

[..]

$sql = "update tabelle set ein_text=".varklebe($ein_text, false).", eine_zahl=".varklebe($eine_zahl, true);

Beachte, daß der Vergleich mit NULL über _drei_ Gleichheitszeichen erfolgen muß; sie sorgen dafür, daß nicht nur der Wert verglichen wird, sondern auch der Typ der Variablen. Bei nur zwei Gleichheitszeichen entspricht der Wert NULL (Typ NULL) wegen der automatischen Typkonvertierung von PHP dem Wert "" (Typ Text) und dem Wert 0 (Typ Numerisch) - und genau das willst Du ja nicht haben.

Gruß,
  soenk.e