René: Wie NULL Werte in MySQL erzeugen?

Hallo,

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?

schönen Gruß
René

  1. Hallo,

    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?

    Du lässt das NOT NULL Attribut weg, setzt als Defaultwert NULL, und fügst nichts ein.
    zb:
    if($null_wert){ //feld wird  NULL
     $sql= "INSERT INTO tbl (FOO,BAR) VALUES ('BAR','FOO')";
    }else{//Feld hat anderen wert
      $sql= "INSERT INTO tbl (FOO,NULL_FELD,BAR) VALUES ('BAR','NICHT NULL', 'FOO')";
    }

    gruß,
    Severin

    --
    Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
    --Philip K. Dick
    1. Hallo,

      if($null_wert){ //feld wird  NULL
       $sql= "INSERT INTO tbl (FOO,BAR) VALUES ('BAR','FOO')";
      }else{//Feld hat anderen wert
        $sql= "INSERT INTO tbl (FOO,NULL_FELD,BAR) VALUES ('BAR','NICHT NULL', 'FOO')";
      }

      Für das INSERT mache ich das bereits genau so, aber mein Problem ist beim UPDATE. Wenn vorher schon mal ein Wert ungleich NULL reingeschrieben wurde, jetzt aber NULL rein kommen soll, dann kann ich nicht einfach nichts reinschreiben, sondern ich muß den bestehenden Wert durch NULL ersetzen.

      schönen Gruß
      René

  2. 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

    1. Hallo Sönke,

      update tabelle set ein_text=null, eine_zahl=null

      Danke, das wars. Hat geklappt. Wobei ich die Funktion gar nicht brauche, die Variable enthält immer nur Strings und nie Zahlen (es sind Rubriken einer Website).

      schönen Gruß
      René