Christian: Probleme mit $sth->fetchrow_array ()

Hallo Leutz!

Hab hier ein kleines Problem, für das ich keine Lösung finde:

SQL - Tabelle:

tblAufpreise

ID  |fk_ReiseID  |Leistung  |Aufpreis
1   |4           |Blah...   |10.0
2   |4           |Zeuch...  |NULL

Perl - Code:

...
my $id;
my @datensatz;

$id = 4;

$sth = $dbh->prepare ("SELECT Leistung, Aufpreis FROM tblAufpreise WHERE fk_ReiseID = ?");
$sth->execute ($id);

while (@datensatz = $sth->fetchrow_array ())
{
  $datensatz[1] = sprintf ("%.2f", $datensatz[1]);
  print p ("Aufpreis: $datensatz[1]");
}
...

Und nun bekomme ich folgenden Fehler, weil das Element mit Index 1 in @datensatz nicht vorhanden ist, weil der Satz mit der ID 2 im Feld 'Aufpreis' einen echten Nullwert enthält:

[Tue Apr 15 15:20:05 2003] DETAILS.pl: Use of uninitialized value in sprintf at G:\transfer\www_root\feisinger\user\cgi-bin\DETAILS.pl line 430.

Was kann ich dagegen tun? Wie kann ich das abfragen oder abfangen?

Danke im vorraus!

Gruß Christian

  1. Und nun bekomme ich folgenden Fehler, weil das Element mit Index 1 in @datensatz nicht vorhanden ist, weil der Satz mit der ID 2 im Feld 'Aufpreis' einen echten Nullwert enthält:

    [Tue Apr 15 15:20:05 2003] DETAILS.pl: Use of uninitialized value in sprintf at G:\transfer\www_root\feisinger\user\cgi-bin\DETAILS.pl line 430.

    Was kann ich dagegen tun? Wie kann ich das abfragen oder abfangen?

    Den Wert belegen.

    $datensatz[1] = sprintf ("%.2f", $datensatz[1] || '');

    Struppi.

    1. Den Wert belegen.

      $datensatz[1] = sprintf ("%.2f", $datensatz[1] || '');

      Struppi.

      Merci!

      Kann ich irgendwie Abfragen, ob es das Element mit dem Index 1 irgendwo gibt?

      if ($datensatz[1] == undef)
      {
      ...
      }

      geht nicht. Ich möchte die Zuweisung von 0 gerne vor dem sprintf machen, da die Schleife noch andere Verarbeitungen ausführt. Wie zum Beispiel Zeichenkonvertierung.

      1. Halihallo Christian

        Kann ich irgendwie Abfragen, ob es das Element mit dem Index 1 irgendwo gibt?
        if ($datensatz[1] == undef)
        {
        ...
        }
        geht nicht.

        Sollte aber...?

        Besser wäre jedoch

        unless (defined($datensatz[1])) {...}

        genauso, wie man eine Variable mit undef($variable) zerstört und nicht über
        $variable=undef;

        Ich möchte die Zuweisung von 0 gerne vor dem sprintf machen, da die Schleife noch andere Verarbeitungen ausführt. Wie zum Beispiel Zeichenkonvertierung.

        was ging denn mit if ($datensatz[1] == undef) nicht? - Hast du geprüft, ob da auch kein
        '' oder 0 drin steht? - undef != '' != 0

        bei $var = '' oder 0 oder undef liefert
        if ($var) {}  false,
        bei $var = '' oder 0 oder undef liefert
        if (defined($var)) nur false bei undef.

        Viele Grüsse

        Philipp