alexander 4454: MYSQL IS NOT NULL

'...
FROM
articles
WHERE
starting_time < NOW() < ending_time AND order IS NOT NULL
ORDER BY
order'

Mit dieser Abfrage bekomme ich eine Fehlermeldung. (Call to a member function fetch_assoc() on a non-object)

Ist der Query falsch? Wie muss ich es dann richtig machen?

  1. Hallo,

    '...
    FROM
    articles
    WHERE
    starting_time < NOW() < ending_time AND order IS NOT NULL
    ORDER BY
    order'

    Mit dieser Abfrage bekomme ich eine Fehlermeldung. (Call to a member function fetch_assoc() on a non-object)

    schön, das ist eine PHP-Fehlermeldung - wieso zeigst du uns dann SQL-Code (noch dazu unvollständigen) anstatt des PHP-Codes, der den Fehler auslöst?

    Ist der Query falsch? Wie muss ich es dann richtig machen?

    Keine Ahnung, was du wirklich tust; keine Ahnung, was du wirklich willst.

    Ciao,
     Martin

    --
    Der Bäcker schlägt die Fliegen tot
    Und macht daraus Rosinenbrot.
    1. Naja weil der PHP Code funtkioniert hat, bis ich 'AND order IS NOT NULL' hinzugefügt habe.

      Aber der PHP Code ist:
      $articles_table = $db->query($articles_sql);
      und dann fünfe mal:
      $articles_result = $articles_table->fetch_assoc();

      Naja ich will die Datensätze haben, die vom Datum her die Bedingung erfüllen und bei denen "order" nicht null ist (sondern eine Zahl).

  2. Hi!

    WHERE
    starting_time < NOW() < ending_time AND order IS NOT NULL
    Mit dieser Abfrage bekomme ich eine Fehlermeldung. (Call to a member function fetch_assoc() on a non-object)

    Das ist ein Folgefehler. Du bekommst ihn, weil du (wie so viele andere vor und nach dir auch), sich nicht die Mühe machen, die Ergebnisse der Funktionen auszuwerten, die sie verwenden. Im Fehlerfall ist der Rückgabewert ein anderer, den man nicht einfach so weiterverwenden kann, als wäre alles in bester Ordnung. Du erwartest also von einer vorhergehenden Funktion ein Result-Objekt, bekommst stattdessen aber ein false, das logischerweise keine Fetch-Methode kennt. Der eigentliche Fehlermeldungstext steht in der Eigenschaft error. (Ich gehe doch recht in der Annahme, dass du mysqli verwendest?)

    Ist der Query falsch? Wie muss ich es dann richtig machen?

    Ja. Mir ist nur eine Programmiersprache bekannt, die Bereichsprüfungen mit zwei < (oder >) und drei Werten erlaubt: Python. Bei den anderen muss man zwei einzelne Vergleiche anstellen. Bei SQL gibt es jedoch auch noch BETWEEN ... AND ...

    Lo!

    1. '...
      WHERE
      (NOW() BETWEEN starting_time AND ending_time) AND order IS NOT NULL
      ORDER BY
      order'

      so funktioniert es aber auch nicht...
      starting_time und ending_time sind im Format DATETIME.

      Und ja ich benutze mysqli...

      1. Hallo Alexander,

        (NOW() BETWEEN starting_time AND ending_time) AND order IS NOT NULL

        -- Du wunderst Dich?

        ORDER BY      -- guck Dir diese Zeile genau an.
        order'  -- und diese auch.

        Du wunderst Dich immer noch?

        so funktioniert es aber auch nicht...

        Kein Wunder, wirklich gar keines: Reserved Words. Quoten zumindest bestimmter Schema Object Names, die Du verwendest, wäre eine gute Idee ...

        Freundliche Grüße

        Vinzenz

        1. ok, aber nachdem ich order durch position ersetzt habe funktioniert bekomme ich noch immer eine Fehlermeldung. Und position ist ja kein Reserved Word.

          1. Hallo Alexander,

            ok, aber nachdem ich order durch position ersetzt habe funktioniert bekomme ich noch immer eine Fehlermeldung.

            Ach ja? Welche Fehlermeldung? Bei welchem Statement? Ist das so schwer zu verstehen?
            Ich besitze leider keine Glaskugel, die mir Deine Fehlermeldung mitteilt.

            Freundliche Grüße

            Vinzenz

      2. http://de.php.net/manual/en/mysqli.error.php

        http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html