Alex Hauer: Ausgabe von Daten einer MySQL - Datenbank

Tag,

ich versuche gerade mir ein Newsscript
zu gestalten, basierend auf PHP 4.2.3 und MySQL 3.23.53 .

Folgender Code sollte die News ausgeben:

<?php
 $sgl = "SELECT
        'name',
        'date',
        'avatar'
        FROM
        'newsscript'
        ORDER BY
        'date' DESC;";
  $result = mysql_query($sql);
   while($row = mysql_fetch_object($result))
   {
    echo "<tr><th class="newsheader">Avatar</th>\n";
    echo "<th class="newsheader">Verfasser</th>\n";
    echo "<th class="newsheader">Datum</th></tr>\n";
    echo "<tr><td> <!-- blank --> </td>\n";
    echo "<td><center>\n";
    echo $row->name;
    echo "</a></td></center>\n";
    echo "<td>\n";
    echo $row->date;
    echo "</td></tr>\n";
    echo "<tr><th rowspan="2"><img src="\n";
    echo $row->avatar;
    echo ""></th>\n";
    echo "<td colspan="3">\n";
    echo $row->newstext;
    echo "</td></th></tr>\n";
    echo "<br /> \n";
   }

Die Verbindung zur Datenbank wurde dabei vorher schon in einer inkludierten PHP - Datei durchgeführt.

Jetzt erhalte ich aber beim Aufrufen des Scripts immer folgenden Fehler:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in c:\apache\apache\htdocs\newssystem\news.php on line 26

Auch wenn ich statt dem mysql_fetch_object() ein mysql_fetch_assoc() verwende, bleibt der Fehler der Gleiche.

Kann mir jemand helfen?

  1. Huhu

    $sgl != $sql

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
  2. Man soll mit schlechter Laune nicht schreiben, aber..

    $result = mysql_query($sql);
       while($row = mysql_fetch_object($result))

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in c:\apache\apache\htdocs\newssystem\news.php on line 26

    Auch wenn ich statt dem mysql_fetch_object() ein mysql_fetch_assoc() verwende, bleibt der Fehler der Gleiche.

    ..warum sind eigentlich so viele Leute nicht in der Lage, sich mal die Beispiele in der PHP-Anleitung anzuschauen? Warum wird nie geprüft, ob eine Funktion vielleicht rein zufälligerweise fehlgeschlagen ist? Warum wird nie versucht, die ausgegebene Warnung wenigstens ansatzweise zu verstehen (falls Du kein Englisch kannst: sorry)?

    Ist mir schleierhaft. Kann doch nicht so schwer sein. Oder doch?

    Schönen Tag,
      soenk.e

    1. ..warum sind eigentlich so viele Leute nicht in der Lage, sich mal die Beispiele in der PHP-Anleitung anzuschauen? Warum wird nie geprüft, ob eine Funktion vielleicht rein zufälligerweise fehlgeschlagen ist? Warum wird nie versucht, die ausgegebene Warnung wenigstens ansatzweise zu verstehen (falls Du kein Englisch kannst: sorry)?

      Tut mir Leid, ich habe mir alle Texte auf http://www.php.net/manual/de/ und in der Dokumentation auf http://www.mysql.com durchgelesen, allerdings bin ich daraus auch nicht wirklich schlau geworden. Auch mehrere Google - Suchen haben nicht das gewünschte Ergebnis gebracht, also hab' ich schlussendlich nach ähnlichen Themen hier im Forum gesucht, und als ich da auch nichts gefunden habe eben selber einen Thread eröffnet.

      Und wegen der Fehlermeldung - auf Deutsch heißt das wohl "Der angegebene Befehl ergibt kein gültiges MySQL Ergebnis" - genau weiß ich es leider tatsächlich nicht. Wenn du aber so freundlich wärst es mir zu erklären ..

      1. ..warum sind eigentlich so viele Leute nicht in der Lage, sich mal die Beispiele in der PHP-Anleitung anzuschauen? Warum wird nie geprüft, ob eine Funktion vielleicht rein zufälligerweise fehlgeschlagen ist? Warum wird nie versucht, die ausgegebene Warnung wenigstens ansatzweise zu verstehen (falls Du kein Englisch kannst: sorry)?

        Tut mir Leid, ich habe mir alle Texte auf http://www.php.net/manual/de/

        Es reicht, wenn Du Dir die Beispiele anschaust und einfach abtippst: Inhaltsübersicht des MySQL-Kapitels, http://www.php.net/manual/de/ref.mysql.php:

        $query = "SELECT * FROM Meine_Tabelle";
          $result = mysql_query($query) or die("Anfrage fehlgeschlagen");

        Man beachte hier den Teil mit "Anfrage fehlgeschlagen"; Fehlerprüfung ist vorhanden, aber zugegebenermaßen noch nicht das Non-Plus-Ultra.

        Etwas weiter unten befindet sich in der Funktionsübersicht folgender Eintrag, sieht man nicht automatisch, müsste man bei Gelegenheit aber immer drüber stolpern:

        "mysql_error --  Liefert den Fehlertext der zuvor ausgeführten MySQL Operation"

        Auf diese Funktion könnte man spätestens dann stoßen, wenn man sich anschaut, wie eine Abfrage mit mysql_query() funktioniert, nämlich unter http://www.php.net/manual/de/function.mysql-query.php, beide Beispiele:

        <php
          $result = mysql_query ("SELECT * WHERE 1=1")
              or die ("Ungültige Abfrage: " . mysql_error());
          ?>

        Man beachte hier den Teil mit "Ungültige Anfrage" und mysql_error().

        Und wegen der Fehlermeldung - auf Deutsch heißt das wohl "Der angegebene Befehl ergibt kein gültiges MySQL Ergebnis" - genau weiß ich es leider tatsächlich nicht.

        Du hast das Wörtchen "argument", welches ganz am Anfang steht, übersehen, genauer gesagt den relevanten Teil "argument is not valid":

        "Warning: mysql_fetch_object(): supplied argument is not a valid
           MySQL result resource in c:\apache\apache\htdocs\newssystem\news.php
           on line 26"

        "Warnung: mysql_fetch_object(): Übergebenes Argument ist keine
           gültige MySQL-Ergebnis-Resource, Zeile blabla".

        Derselbe Satz, etwas umgedreht und aufgepustet: Das Argument, daß Du an mysql_fetch_object() in Zeile 26 übergeben hast, ist falsch. Da Du mysql_fetch_object() nur einziges Argument angedreht hast, ist eine Verwechslung ausgeschlossen - $result muß irgendwie kaputt sein. $result bekommst Du von mysql_query() eine Zeile höher, ergo kann irgendwas mit mysql_query() nicht stimmen.

        Auf diesen Zusammenhang wärest Du mit Fehlerprüfung sofort gestoßen, mit mysql_error() wärest Du sicher noch einen Schritt weiter gekommen (wenn auch vielleicht nicht ans Ziel). Das tatsächliche Problem, auf das ja bereits hingewiesen wurde, ist natürlich so hinterhältig, wie Tippfehler nur sein können.

        Langer Rede, kurzer Sinn: Ergebnisse, die irgendwie von draußen hereingeschneit kommen, _immer_  überprüfen. Das gilt übrigens nicht nur für mögliche Fehler (wie in diesem Fall), sondern ausdrücklich auch für die Daten selbst. Es sind schon vielen Leuten Dinge von A wie anrüchigem HTML-Code bis zu Z wie Zugangsberechtigung untergejubelt worden, weil sie zu vertrauensselig waren.

        Dein vorliegendes Skript könnte übrigens ebenfalls anfällig sein. Überlege Dir mal, was passiert, wenn in einem der Datenfelder, die Du zum Beispiel per

        echo $row->newstext;

        ausgibst, lustige Sachen wie

        <script type="text/javascript">
          while (true) alert("Abgeschossen");
          </script>

        auftauchen (bzw. wie die dann im vom PHP-Skript ausgegebenen HTML-Quelltext erscheinen). Informiere Dich in dem Zusammenhang über eine PHP-Funktion namens htmlentities().

        Gruß,
          soenk.e

        1. Danke - mit so einer Antwort kann ich wirklich etwas anfangen :-)

          Alex