Jörk Behrends: Perl + Sql

Beitrag lesen

Hallo Thorsten,

while (@satz = $sth->fetchrow_array)
...
if ($satz[8] != "NULL")
{
...

Das letzte if wird aber immer übersprungen (also scheinbar $satz[11]="NULL"), obwohl das Feld definitiv Daten enthält, wenn ich es nach der Abfrage ausgebe. Muß die Abfrage auf "leere" Felder anders erfolgen oder wo liegt der Fehler ?

Textvergleiche solltest Du mit den entsprechenden vergleichoperatoren eq (equal) bzw. ne (not equal) durchführen. Ansonsten wird versucht, die Strings als Zahlen zu interpretieren - d.h. in diesem Fall, daß 'NULL' der Zahl 0 entspricht :). Wenn Du nun zufällig in den ersten Spalten eine Zahl unlgeich 0, in der elften jedoch einen String oder ein 0 hattest, sollte sich das Programm genauso verhalten, wie Du es beschrieben hast.

ABER, wenn man es sich genauer überlegt, kann es gar nicht sinnvoll sein, einen SQL-NULL Wert durch den String NULL zu repräsentieren - wie will man dann denn den String NULL ablegen? DBI macht das auch gar nicht. Ensprechende Werte sind schlichtweg nicht definiert - genauer gesagt 'undefined'. Die Abfrage sollte also wie folgt aussehen:

if (defined ($satz[8]))
{
    print "$satz[8]<BR>\n";
}
...

Oder vielleicht so:
print "$satz[8]<BR>\n" if defined $satz[8];

Viel Erfolg,
   Jörk