Wie NULL Werte in MySQL erzeugen?
René
- datenbank
0 Severin Kacianka0 René
0 Sönke Tesch0 René
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é
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
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é
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
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é