Marco: Prüfen ob MYSQL Abfrage LEER oder 0

Moinsen,

wie kann ich mit einer If-Abfrage prüfen, ob die MYSQL-Abfrage Leer oder "0" ist???

Beispiel:

if($ergebnis == 0)
{
$test = 'ist true';
}
else
{
$test = 'ist false';
}

Gibt TRUE zurück, selbst wenn die MYSQL-Abfrage Leer ist!

Ich möchte gerne von Leer und "0" unterscheiden.

Mit empty() oder isset() funktioniert es leider nicht.

Vielleicht jemand eine Idee?

Vielen Dank

MfG
Marco

  1. Bei einem leeren Ergebnis kommt keine Ergebniszeile zurück. Bei 0 gibt es eine Zeile die 0 enthält.
    Was in deinem Fall $ergebnis sein könnte, weiß aufgrund deiner (nicht) Beschreibung aber wirklich keiner.

    1. Habe das Problem mit

      if (empty($var) && $var!==0)

      gelöst.

      Danke

      1. Hello,

        Habe das Problem mit

        if (empty($var) && $var!==0)

        gelöst.

        PHP kennt auch die Funktion is_null().
        http://de2.php.net/manual/en/function.is-null.php

        Ich war mir jetzt aber auf die Schnelle nicht sicher, ob beim Tranfer MySQL->PHP das NULL eventuell verloren geht, weil eine Stringumwandlung stattfindet. Aber wahrscheinlich bringe ich das jetzt nur durcheinander mit HTML->PHP, denn sonst wäre ja die Funktion
        http://de2.php.net/manual/en/function.mysql-field-type.php unsinnig...

        Das Pendant für mysqli finde ich leider nicht :-(

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bikers-lodge.com
      2. Tach!

        Habe das Problem mit
        if (empty($var) && $var!==0)
        gelöst.

        Da bin ich skeptisch. Zumal nun plötzlich eine Variable $var auftaucht, deren Herkunft du nicht angibst. Auch im Ausgangsposting ist nicht wirklich klar, was $ergebnis sein soll. Ist es das, was mysql_query() zurückliefert? Nun dann wäre das entweder false oder eine Ressourcen-Kennung, die die Fetchfunktionen benötigen. Eine leere Menge erkennt man nun daran, dass die verwendete Fetchfunktion zu dieser Ressourcen-Kennung sofort false zurückliefert, anderenfalls einen Datensatz.

        dedlfix.

        1. Hello dedlfix,

          Habe das Problem mit
          if (empty($var) && $var!==0)
          gelöst.

          Da bin ich skeptisch. Zumal nun plötzlich eine Variable $var auftaucht, deren Herkunft du nicht angibst. Auch im Ausgangsposting ist nicht wirklich klar, was $ergebnis sein soll. Ist es das, was mysql_query() zurückliefert? Nun dann wäre das entweder false oder eine Ressourcen-Kennung, die die Fetchfunktionen benötigen. Eine leere Menge erkennt man nun daran, dass die verwendete Fetchfunktion zu dieser Ressourcen-Kennung sofort false zurückliefert, anderenfalls einen Datensatz.

          Ich habe Marco so verstanden, dass in einem Feld eines Ergebnisdatensatzes entweder NULL, 0 oder etwas <> 0 steht, er also z.B. einen TinyInt für die "Logical"-Spalte benutzt hat und vergessen hat, NULL zu verbieten und einen Default (z. B. 0) einzustellen.

          Da sollte er doch mit is_null() aus der PHP-Funktionsbibliothek
          http://de1.php.net/manual/en/function.is-null.php
          zum Erfolg kommen.

          Ich war mir nur nicht sicher, ob der Transfer von MySQL nach PHP wie vorgesehen funktioniert. Aber der Fehler ist wohl schon lange behoben. Das Array-Element im Ergebnisdatensatz nimmt ordnungsgemäß den Wert NULL an und verschwindet nicht mehr einfach aus dem Array.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bikers-lodge.com
  2. Hello,

    wie kann ich mit einer If-Abfrage prüfen, ob die MYSQL-Abfrage Leer oder "0" ist???

    Beispiel:

    if($ergebnis == 0)
    {
    $test = 'ist true';
    }
    else
    {
    $test = 'ist false';
    }

    Gibt TRUE zurück, selbst wenn die MYSQL-Abfrage Leer ist!

    Ich möchte gerne von Leer und "0" unterscheiden.

    Mit empty() oder isset() funktioniert es leider nicht.

    Da ist es auch schon zu spät.
    Du könntest z.B. bereits im Query auf "is_null()" prüfen
    http://dev.mysql.com/doc/refman/5.1/en/non-typed-operators.html
    http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#operator_is-null

    Da kannst Du dann bereits in der Abfrage mittels if() und ifnull()
    http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if
    http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_ifnull

    eine berechnete Spalte ausgeben, in der "NULL", "TRUE" oder "FALSE" als Ergebnis zurückgeben wird. Das sind dann aber im Resultset nur Literale.

    Da Du ja weißt, dass Du sort keinen Text erwartest, kannst Du dir dieses Ergebnis in PHP dann wieder zurückwandeln mit einer kleinen Funktion, die ein "PHP-echtes" NULL, TRUE oder FALSE liefert.

    select if(isnull(enabled, 'NULL', if(enabled = 0, 'FALSE', 'TRUE')) as status
        from table
        ...

    So ungefähr.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bikers-lodge.com