[PHP,MYSQL] und NULL Werte in DB

martin

Well-Known Member
Hallo

ich habe folgendes Problem... und zwar hab ich eine MySQL Datenbank, da gibt es unter anderem 2 Felder, die ich als int(11) mit Standard NULL definiert habe. Soweit so gut. Alles klappt wunderbar, zumindest mit dem Reinschreiben in die Datenbank. Jetzt ist in Feld1 der Wert NULL drin und in Feld2 der Wert 0. Wenn ich aber mit php die Datensätze folgendermaßen auslese
PHP:
$mysql_query = "SELECT * from test";
$row = mysql_fetch_object(mysql_query($mysql_query));

		echo $row->feld1;
		echo $row->feld2;

So, mir ist bewusst, dass MySQL und php das mit dem NULL verschieden handhaben, aber eigentlich müsste mir in meinem Fall doch einmal nix ausgegeben werden, also "" und einmal 0, oder? Das passiert aber nicht. Ich kann es drehen und wenden wie ich will, er unterscheidet einfach nie zwischen 0 und NULL. :grumble:
Kann das sein? Wohl kaum, oder?

thx
 
Zuletzt bearbeitet:
Was gibt er denn jetzt genau aus?
Das konnte ich deinem Post nicht so ganz entnehmen.
2x null, 2x "0" oder 2x "" ?

ciao
 
Beide male nix, also ""

obwohl in der Datenbank unter MySQL einmal 0 und einmal NULL drin steht!

was auch komisch ist, ist dass ein is_null() bei beiden true ist!
 
Moin, var_dump($row) sollte in deinem Fall eigentlich

Code:
object(stdClass)#1 (2) {
  ["feld1"]=>
  NULL
  ["feld2"]=>
  string(1) "0"
}

korrekterweise auswerfen. Gleicht sich Struktur und Datensatz so?

Code:
mysql> describe test.int;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| feld1 | int(11) | YES  |     | NULL    |       | 
| feld2 | int(11) | YES  |     | NULL    |       | 
+-------+---------+------+-----+---------+-------+

mysql> select * from test.int;   
+-------+-------+
| feld1 | feld2 |
+-------+-------+
|  NULL |     0 | 
+-------+-------+

Gruß
 
Bei PHP gilt: "" == 0 == "0" == NULL == FALSE == array() == var $var;

Mit solchen Werten also immer vorsichtig sein.
 
Zunächst mal danke für die ganzen schnellen Antworten...

@hijacker
ja genau so sieht es bei mir aus. Also wenn ich mit mysql> direkt an der Konsole die query ausführe, bekomme ich 0 und NULL als korrekte Werte.

@oenone
aber wenn das für php alles das Selbe ist, wie kann ich dann von MySQL gelieferte Werte 0 und NULL unterscheiden? z.B. wenn ich sowas möchte:
PHP:
if ($feld1==null){
    $status="status1";
}elseif($feld1==0){
    $status="status2";
}else{
    $status="status3";
}
wobei $feld1 eben den Wert von der Datenbank bekommt. :confused: Das muss doch möglich sein zu unterscheiden auch in php, oder?

@kamikaze
auch ein ===0 liefert bei beiden den selben Wert
 
Das Problem ist, das NULL und 0 in den meisten Programmiersprachen das selbe sind. Die Unterscheidung wird nur gemacht um zu verdeutlichen, dass man von einer Speicheradresse spricht.
 
Zurück
Oben