Auge: Eingeschränkte Abfrage in PHP

Beitrag lesen

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