Jessica: IF/ELSE

Hallo!

Leider komme ich unter Perl (Modul DBI::ODBC) mit der folgenden IF/ELSE-Anweisung nicht weiter. Die IF-Schleife soll abfragen, ob ein passender Eintrag in der DB vorhanden ist oder ansonsten an ELSE weitergeben. Es wird aber immer nur die IF-Bedingung erfüllt (?), auch wenn überhaupt kein passender Eintrag in der Access-DB vorhanden ist (rows ==0). Kann mir jemand von Euch weiterhelfen ?

Hier die Bedingung -->
-----------------------------------------
if ($STH->rows != 0) {

print <<HERE_TEXT;
Content-type:text/html

<html>
<head>
<title>Antwort</title>
</head>

<body>
<center>

<h1>Treffer:</h1>

HERE_TEXT

} else {

print <<HERE_TEXT2;
Content-type:text/html

<html>
<head>
<title>Antwort</title>
</head>

<body>
<center>

<h1>KEIN Treffer:</h1>

HERE_TEXT2

}
-------------------------------------------------
Danke Jessica.

  1. Versuche es mit if ($STH->rows > 0) ...
    Versuche es zur Kontrolle mit print $STH->rows;

    1. Versuche es mit if ($STH->rows > 0) ...
      Versuche es zur Kontrolle mit print $STH->rows;

      Die Ausgabe für $STH->rows > 0 oder $STH->rows != 0 ist immer -1!

      Gruß Jessica.

      1. Hallo,

        Unabhängig von dem eigentlichen Problem: IF ist beim besten Willen keine Schleife! Es wundert mich das sich bisher noch niemand darüber hergemacht hat;-)

        cu Benedikt Loepp

  2. Hallo,

    if ($STH->rows != 0) {

    Zitat aus der DBI_Doku:
    Returns the number of rows affected by the last row affecting command, or -1 if the number of rows is not known or not available.

    Und weiter:
    ... So use of the rows method or $DBI::rows with SELECT statements is not recommended.

    Fazit:
    Löse es anders. z.B.könntest Du beim ersten erfolgreichen fetchrow_*() den allgemeinen Kopf ausgeben und, wenn das nicht erfolgreich war, den Kein-Treffer-Kopf.

    btw. $STH entspricht nicht den Perl-üblichen Styleguides. Näheres dazu in perldoc perlstyle.

    Grüße
      Klaus