VivienSchiller: Eingeschränkte Abfrage in PHP

Hallo ihr Lieben!

Ich habe folgende Situation: auf meiner Website ist nur der Nachrichten-/Blog-Teil mit CMS gestaltet, der Rest ist mehr oder minder statisch. Nun würde ich gerne in der Sidebar der gesamten Website die letzten drei Artikel mit Erscheiungsdatum anzeigen lassen und ich habe folgende Lösung im Internet gefunden:

<?php
mysql_connect("mysql.meinserver.de", "benutzername", "passwort") or die (mysql_error ());
mysql_select_db("meinedatenbank") or die(mysql_error());
$strSQL = "SELECT Titel, Datum FROM Nachrichten";
$rs = mysql_query($strSQL);
while($row = mysql_fetch_array($rs)) {
echo $row['Titel'] . "<br />" . $row['Datum'] . "<br />";
}
mysql_close();
?>

Meine Idee wäre ORDER BY und dann LIMIT, allerdings kann ich das noch nicht überprüfen ob das hinhaut, da mir die Datenbank-Daten erst in ferner Zukunft bekannt gegeben werden.

Danke schonmal im voraus!

  1. Moin!

    BEVOR Du darüber weiter nachdenkst:

    1. die mysql-funktionen sind abgekündigt. Mach das also mit pdo oder mysqli.
    2. Was hindert Dich, Die in einer virtuellen Maschine ein Linux aufzusetzen und in diesem PHP, mySQL Webserver zu installieren? Es ist so einfach ...

    Jörg Reinholz

    1. Hall Jörg!

      Danke erstmal für deine schnelle Antwort!

      1. die mysql-funktionen sind abgekündigt. Mach das also mit pdo oder mysqli.
      2. Was hindert Dich, Die in einer virtuellen Maschine ein Linux aufzusetzen und in diesem PHP, mySQL Webserver zu installieren? Es ist so einfach ...

      Nunja ich würde das zugegebener Maßen gerne alles über den Quelltext lösen und wie bereits geschrieben musste ich selbst MySQL ergooglen. Es wäre also nett wenn du dich ein bisschen einfacher ausdrückst, weil ich deine Ansätze nicht annähernd verstehe...

      Liebe Grüße

      1. Moin!

        wäre also nett wenn du dich ein bisschen einfacher ausdrückst, weil ich deine Ansätze nicht annähernd verstehe...

        1. Einstiegspunkt mit Abfragebeispiel in mysqli.
        2. Einstiegspunkt mit Abfragebeispiel in pdo

        Jörg Reinholz

      2. Hallo Vivien,

        mit LIMIT und ORDER_BY sollte das so gehen:

        SELECT Titel, Datum FROM Nachrichten ORDER BY Datum DESC LIMIT 3
        

        Ich ergänze mal Jörgs Ausführungen ein wenig:

        1. die mysql-funktionen sind abgekündigt. Mach das also mit pdo oder mysqli.

        Die mysql-Erweiterung wurde in der neusten PHP-Version 7 entfernt, nachdem sie bereits seit einiger Zeit als „veraltet“ gekennzeichnet wurde. Als Ersatz gibt es die pdo-Erweiterung und eben mysqli – bei letzterem reicht es meist, einfach alle mysql in mysqli umzuändern. Wenn ich mich nicht verguckt habe, sollte das mit deinem Code problemlos gehen.

        1. Was hindert Dich, Die in einer virtuellen Maschine ein Linux aufzusetzen und in diesem PHP, mySQL Webserver zu installieren? Es ist so einfach ...

        Jörg meint damit, dass du dir eine Testumgebung aufsetzen sollst. Es geht aber auch ohne eine Virtuelle Maschine:
        Du kannst das auch bei einem (kostenlosen) Webhoster ausprobieren, z.B. bplaced.net. Allerdings macht es Sinn, zuerst einmal mehr Informationen zum Datenbankformat einzuholen und dann erst zu programmieren.

        Nunja ich würde das zugegebener Maßen gerne alles über den Quelltext lösen und wie bereits geschrieben musste ich selbst MySQL ergooglen. Es wäre also nett wenn du dich ein bisschen einfacher ausdrückst, weil ich deine Ansätze nicht annähernd verstehe...

        Für MySQL kenne ich da etwas: schattenbaum.net: MySQL

        Allgemein ist mir nicht ganz klar, was du eigentlich genau wissen möchtest, da du keine Frage stellst...

        Gruß
        Julius

        1. Hallo

          SELECT Titel, Datum FROM Nachrichten ORDER BY Datum DESC LIMIT 3
          

          Ich ergänze mal Jörgs Ausführungen ein wenig:

          1. die mysql-funktionen sind abgekündigt. Mach das also mit pdo oder mysqli.

          Die mysql-Erweiterung wurde in der neusten PHP-Version 7 entfernt, nachdem sie bereits seit einiger Zeit als „veraltet“ gekennzeichnet wurde. Als Ersatz gibt es die pdo-Erweiterung und eben mysqli – bei letzterem reicht es meist, einfach alle mysql in mysqli umzuändern. Wenn ich mich nicht verguckt habe, sollte das mit deinem Code problemlos gehen.

          Trotz meines +1 für deine einsteigerfreundlichen Ausführungen ein deutliches Nein zu „ reicht es meist, einfach alle mysql in mysqli umzuändern“.

          Das einfache Umbenennen der Funktionsnamen von mysql_irgendwas in mysqli_irgendwas allein reicht nicht. Erstens setzen die mysqli-Funktionen bei Verwendung im prozeduralen Stil die Angabe der Verbindungskennung zwingend voraus, zweitens wird diese Kennung, im Gegensatz zu den mysql-Funktionen, als erster Funktionsparameter übergeben und drittens ist z.B. die Funktionalität von mysql_connect und mysql_select_db in einer Funktion mysqli_connect zusammengefallen. Es gibt zwar auch eine Funktion mysqli_select_db, die dient aber nur zur Änderung der Standarddatenbank der bestehenden Verbindung. Und dann sind da noch Funktionen, die anders heißen und/oder arbeiten.

          Ich hoffe, das richtig aus der PHP-Doku zusammengeklaubt zu haben. Selbst mit MySQLi gearbeitet habe ich nämlich auch noch nicht.

          <?php
          $kennung = mysqli_connect("mysql.meinserver.de", "benutzername", "passwort", "meinedatenbank");
          if (!$kennung) {
              // nicht zustandegekommene Verbindung behandeln
              // übrigens: die() ist außerhalb der Skriptentwicklung keine Fehlerbehandlung!
          } else {
              // Abfrage
              $strSQL = "SELECT Titel, Datum FROM Nachrichten ORDER BY Datum DESC LIMIT 3";
              if (mysqli_real_query($kennung, $strSQL)) {
                  // Gibt es ein Ergebnis?
                  if ($resultat = mysqli_use_result($kennung)) {
                      while ($row = mysqli_fetch_row($resultat)) {
                          // Ausgabe
                          echo $row['Titel'] . "<br />" . $row['Datum'] . "<br />";
                      }
                      mysqli_free_result($resultat);
                  } else {
                      // Meldung über nicht vorhandene Datensätze oder nix
                  }
              }
          }
          mysqli_close($kennung);
          ?>
          

          Egal, ob der hier zusammengeschusterte Code korrekt funktioniert oder nicht, er unterscheidet sich doch erheblich vom typischen Aufbau mit der alten MySQL-Bibliothek.

          Tschö, Auge

          --
          Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
          Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
          1. Hallo Auge,

            Trotz meines +1 für deine einsteigerfreundlichen Ausführungen ein deutliches Nein zu „ reicht es meist, einfach alle mysql in mysqli umzuändern“.

            Oh ja, du hast Recht!
            Als ich mit PHP und MySQL anfing, war die mysql-Erweiterung schon längst als veraltet markiert und mein einziger Berührungspunkt mit ihr war, dass ich mich bei der Problemlösungssuche im Internet zu Beginn immer über die Idioten geärgert habe, die immer das i hinten dran vergessen (dass PHP ein Error-Log führt, wusste ich da auch noch nicht)... ;-)

            Nostalgische Grüße
            Julius

            1. Hallo

              Trotz meines +1 für deine einsteigerfreundlichen Ausführungen ein deutliches Nein zu „reicht es meist, einfach alle mysql in mysqli umzuändern“.

              Als ich mit PHP und MySQL anfing, war die mysql-Erweiterung schon längst als veraltet markiert und mein einziger Berührungspunkt mit ihr war, dass ich mich bei der Problemlösungssuche im Internet zu Beginn immer über die Idioten geärgert habe, die immer das i hinten dran vergessen …

              Als ich mit MySQL in Berührung kam und mit PHP darauf zugreifen wollte, war die MySQL-Schnittstelle State of the Art. Die MySQLi- und PDO-Schnittstellen habe ich erst zur Kenntnis genommen, als wieder und wieder darauf hingewiesen wurde, dass die MySQL-Schnittstelle abgekündigt ist.

              Und wenn ich's recht überlege, warten in dieser Hinsicht noch einige Baustellen darauf, von mir bearbeitet zu werden. Ich brauche echt mehr Zeit.

              (dass PHP ein Error-Log führt, wusste ich da auch noch nicht)... ;-)

              Kommt auf die Einstellungen auf dem ausführenden Server an. Bei vielen Shared-Web-Hostung-Angeboten gibt es die Möglichkeit, ein Error-Log zu führen nicht oder man muss es in der Konfiguration explizit einschalten.

              Tschö, Auge

              --
              Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
              Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
              1. Hallo Auge,

                Und wenn ich's recht überlege, warten in dieser Hinsicht noch einige Baustellen darauf, von mir bearbeitet zu werden. Ich brauche echt mehr Zeit.

                So much to code, so little time… kenn ich ;-)

                LG,
                CK

                1. Hallo Christian

                  Und wenn ich's recht überlege, warten in dieser Hinsicht noch einige Baustellen darauf, von mir bearbeitet zu werden. Ich brauche echt mehr Zeit.

                  So much to code, so little time… kenn ich ;-)

                  Nicht nur das. Im Betrieb bin ich tagtäglich mit völlig anderen Konzepten und Sprachen (vorwiegend VBA, Access-SQL und MS-SQL) zugange. Jetzt (seit ca. einer Woche) kommt, aus eigenem Interesse, auch noch Python hinzu. Es ist also nicht nur zu viel Code für zu wenig Zeit. Es kommen auch noch Interessensverschiebungen und „Ich will zuhause keinen Rechner mehr anfassen müssen“-Zustände hinzu.

                  Tschö, Auge

                  --
                  Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
                  Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
                  1. Hallo Auge,

                    Nicht nur das. Im Betrieb bin ich tagtäglich mit völlig anderen Konzepten und Sprachen (vorwiegend VBA, Access-SQL und MS-SQL) zugange.

                    Das wäre für mich ein Kündigungsgrund duck

                    LG,
                    CK

                    1. Hallo Christian

                      Nicht nur das. Im Betrieb bin ich tagtäglich mit völlig anderen Konzepten und Sprachen (vorwiegend VBA, Access-SQL und MS-SQL) zugange.

                      Das wäre für mich ein Kündigungsgrund duck

                      Mal sehen, ob ich das noch getoppt kriege: Für einige Anwendungen wird noch Access97 eingesetzt.

                      Na, wie isses? ;-)

                      Mal im ernst. Das ist alter, abgeranzter Code, also sowohl Access 97 selbst mit seinen – nach heutigen Maßstäben – eingeschränkten Möglichkeiten, als auch der ursprünglich noch aus Access 2 übernommene und über Access 95 hinweg weiterentwickelte Anwendungscode. Ich bin dennoch gelegentlich überrascht, was man da an Möglichkeiten herausholen kann, wenn man nicht die zusammenklickbaren Standardwege geht, sondern eigenen Code benutzt.

                      Mittelfristig wollen wir aber von genau diesem Zustand weg. Bei Anwendungen mit mehreren hundert Tabellen und Formularen, deren neue und, wo es möglich ist, vereinfachte Struktur überlegt sein will, ist das aber nicht mal eben so gemacht. Gerade, wenn der Betrieb der Anwendung(en) derweil weiter laufen muss.

                      Der Status Quo ist eben der größte Feind der Veränderung. Das ist quasi das Äquivalent der Masseträgheit.

                      Tschö, Auge

                      --
                      Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
                      Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
                      1. Hallo Auge,

                        Mal sehen, ob ich das noch getoppt kriege: Für einige Anwendungen wird noch Access97 eingesetzt.

                        Na, wie isses? ;-)

                        Deshalb habe ich bereits einmal gekündigt, MS-SQL mit einer alten Access-Anwendung (weiss aber nicht mehr genau welche Version, ob 97, ob 95 - jünger wars aber nicht), im Jahre 2010 ;-)

                        Mal im ernst. Das ist alter, abgeranzter Code, also sowohl Access 97 selbst mit seinen – nach heutigen Maßstäben – eingeschränkten Möglichkeiten, als auch der ursprünglich noch aus Access 2 übernommene und über Access 95 hinweg weiterentwickelte Anwendungscode. Ich bin dennoch gelegentlich überrascht, was man da an Möglichkeiten herausholen kann, wenn man nicht die zusammenklickbaren Standardwege geht, sondern eigenen Code benutzt.

                        Das mag ja sein, aber dieser ganze Technologie-Stack widert mich derart an, ich will damit ernsthaft nichts zu tun haben.

                        Der Status Quo ist eben der größte Feind der Veränderung. Das ist quasi das Äquivalent der Masseträgheit.

                        Wem sagst du das… ich war damals dafür eingestellt worden, die Anwendung zu ersetzen. Nicht nur gab es in der Firma aber überhaupt keinen Rückhalt, nein, es gab auch massive Probleme mit der bestehenden Anwendung, die ich dann pflegen musste, weil der damalige Chef in einem Wut-Anfall den bisherigen Maintainer gefeuert hat. Die Software war aber wirklich auch das schlimmste, was man sich vorstellen konnte, Spaghetti-Code ohne Ende, den Code wild und ohne roten Faden auf Access/VB und die Datenbank verteilt, keine Constraints (nicht ein einziges, weder PK noch NOT NULL noch sonst irgendwas) dafür jede Menge Trigger.

                        Ich hab mich gezwungen ein Jahr auszuhalten.

                        LG,
                        CK

    2. @@Jörg Reinholz

      2. Was hindert Dich, Die in einer virtuellen Maschine ein Linux aufzusetzen und in diesem PHP, mySQL Webserver zu installieren? Es ist so einfach ...

      Wozu braucht man dazu eine VM? Warum neben OS X noch Linux? *duckundweg*

      LLAP 🖖

      --
      „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
      „Hat auf dem Forum herumgelungert …“
      (Wachen in Asterix 36: Der Papyrus des Cäsar)