Hallo,
NULL würde heißen: Der Wert ist gesetzt. Aber: Dein Wert ist eben nicht gesetzt, isset() ist Dein Freund ;)
nein, der Code von L(in)uchs ist völlig in Ordnung (außer nicht besonders lesbar) und das vom OP beschriebene Verhalten läßt sich nicht nachvollziehen.
Bedenke, dass der OP die Funktion is_null() verwendet, deren Einsatz hier völlig angemessen ist. Er weiß ja, dass es diese Spalte und damit diesen Arrayeintrag gibt.
Beispielcode für einen XAMPP (out-of-the-box, ungesichert):
# Ich gehe Kontextproblemen aus dem Weg
header("Content-type: text/plain");
# Verbindungsaufbau zu einem ungesicherten XAMPP :-)
$conn = mysql_connect('localhost', 'root', '');
# Die Fehlerbehandlung lasse ich der Einfachheit halber weg ...
# Mir reicht ein Datensatz mit einer Spalte, die einen NULL-Wert enthält
$query = 'SELECT NULL AS spalte1, 3 AS spalte2';
$result = mysql_query($query);
if ($row = mysql_fetch_array($result)) {
# Erste Debugausgabe
var_dump($row);
print "\n\n";
# Schauen wir, was aus L(in)uchs' Code resultiert
if ([link:http://de.php.net/manual/de/function.is-null.php@title=is_null]($row['spalte1'])) {
print "Spalte1 IS NULL\n";
}
else {
print "is_null konnte nicht feststellen, dass da ein NULL-Wert steht.\n";
}
}
#------------------------------------------------
Ausgabe
array(4) {
[0]=>
NULL
["spalte1"]=>
NULL
[1]=>
string(1) "3"
["spalte2"]=>
string(1) "3"
}
Spalte1 IS NULL
#------------------------------------------------
Und somit das gewünschte Ergebnis.
Ja, ich habe es auch mit der unübersichtlichen "Kurzschreibweise" mit gleichem Ergebnis getestet:
if (is_null($row['spalte1'])) echo "Spalte1 IS NULL\n"; else echo "is_null konnte nicht feststellen, dass da ein NULL-Wert steht.\n";
Freundliche Grüße
Vinzenz