Wie du mit MySQL Datensätze auf einer Seite benutzt

Veröffentlicht von Oliver - 23. September 2019

Möchte man bestimmte Informationen auf einfachem Wege mehrmals auf einer Webseite ausgeben, gibt es 2 Möglichkeiten. Einerseits kann man einen Array benutzen. Oder aber man benutzt eine Datenbank. Beide Varianten haben Vorteile und Nachteile. Mit Arrays lässt sich direkt im Code arbeiten. Dafür bleiben Datenbanken bei jeder Größe übersichtlich. In diesem Beitrag möchte ich zeigen,

sai-kiran-anagani-5Ntkpxqt54Y-unsplash

Wann lohnt es sich, eine Datenbank zu verwenden?

Wenn man einen eigenen Webserver hat, oder mietet, muss man erst mal schauen, ob dieser überhaupt die Möglichkeit hat, MySQL zu verwenden. Hat man genug Rechte auf dem Server, kann man es einfach selbst installieren. Andernfalls muss man nachschauen, ob der Hosting-Vertrag auch Datenbanken unterstützt. Auf dieser Datenbank müssen dann die jeweiligen Tabellen definiert werden, mit allem was dazugehört. Der PHP-Code muss dann auch insofern verändert werden, dass dieser die Datensätze aus der Datenbank auslesen kann. Hat man also nur wenige Datensätze, die man selten ändern muss, lohnt es sich eher, einen Array zu machen. Hat man jedoch viele Daten, und muss diese öfter, oder über die eigene Website, ändern, ist es ärgerlich, immer in den Quellcode zu gehen und die richtige Stelle zu suchen. Wichtig dabei ist folgendes:

  • Wir arbeiten mit PHP, möchtest du folgendes also ausprobieren brauchst du einen Webserver oder XAMPP.
  • Die Datenbank muss zumindest schon mit ein paar Werten gefüllt sein, um bei Tests auch etwas zu sehen.

Dieser Beitrag erklärt nicht, wie SQL selbst funktioniert, nur wie man eine Datenbank über Websiten verwendet. Das kannst Du von anderen Artikeln lernen. Ich werde es anhand des objekt-orientierten MySQLi Syntax erklären. Und nun die Schritt-für-Schritt-Anleitung, wie es funktioniert: Photo by Sai Kiran Anagani on Unsplash

Schritt 1: Verbindung zur Datenbank herstellen:

Ohne Verbindung weiss dein Code nicht, wo er die Informationen herholen soll. Und ohne Passwort kommt er an diese nicht ran. Also muss dein Code beides erst erhalten.

// Erstelle Die Verbindung:
$Verbindung = new mysqli("Servername", "Benutzername", "Passwort", "Datenbankname");
// Prüfe nach ob sie funktioniert:
if ($Verbindung ->connect_error) {
    die("Verbindung fehlgeschlagen: " . $Verbindung->connect_error);
} 

// Schliesse die Verbindung:
$Verbindung->close();

Sehr selbsterklärend:

  • $Verbindung ist ein mysqli Objekt und speichert die Anmeldedaten für später.
  • Jeder weitere Befehl läuft über $Verbindung.
  • Brauchst du die Datenbank nicht mehr, kannst du sie einfach mit close() schließen.
  • Natürlich kannst du auch Variablen benutzen, wenn du möchtest, dass man sich auf der Website anmelden kann, um die Datenbank zu verändern.

Schritt 2: Ausgabe von Datensätzen

Um etwas aus der Datenbank auf einer Website anzuzeigen muss es erst geladen werden. So funktioniert das:

$SQL_Befehl = "SELECT * FROM Tablename";

$Ergebnis= $Verbindung->query($SQL_Befehl);

while($Ergebnis_als_Array= $Ergebnis->fetch_assoc()){
  (Weiterverarbeitung des Arrays)
}

Was tut dieser Code:

  • $SQL_Befehl speichert SQL-Code als String. Wird er nur ein einziges mal benötigt, kann man ihn auch direkt in query() einfügen.
  • Jeder SQL-Befehl wird mit query() an die Datenbank ($Verbindung) geschickt. Das Ergebnis hängt vom Typ des SQL-Befehls ab. Hier ist das Ergebnis die Ausgabe vom SELECT.
  • fetch_assoc() speichert alle Ergebnisse als Array, durch den man loopen kann.
  • die while-Schleife loopt durch den Array.

Nun kann man mit dem Ergebnis genau gleich weiter arbeiten wie mit jedem anderen Array auch. So lassen sich Schleifen, geschrieben für Arrays, leicht wiederverwenden. Wichtig dabei ist, dass der Index des Arrays immer von 0 hochgezählt ist und die Reihenfolge abhängig vom SQL Code. Soll diese spezifisch sein, muss man sie also mit einem „ORDER BY“ im SQL-Teil erzwingen. Jedes Element im Array entspricht einer Zeile der „SELECT“-Ausgabe, also einem Datensatz. Die einzelne Zeile ist dann auch wieder ein Array, bei dem die Indexe den Namen der Spalten des Tables entsprechen. Möchte man diese in PHP anders nennen, kann man einfach „AS“ im SQL-Teil benutzen.

Schritt 3: Überarbeitung von Daten

Möchte man die Datensätze ändern, Neue speichern oder Alte Löschen, gibt es auch wieder zwei Möglichkeiten. Entweder Du arbeitest mit einer Seite wie phpMyAdmin oder einem Programm wie postgreSQL. Beide funktionieren sehr ähnlich, dass sie Dich SQL-Befehle direkt an die Datenbank schicken lassen. Möchtest Du das die Seite Infos der Datenbank nur ausgibt, kannst Du hier aufhören, und eine der beiden Möglichkeiten nutzen. Soll man aber auf der Website selbst mit der Datenbank interagieren können, zeige ich hier, wie das funktioniert.

//Neuer Eintrag
$sql_Befehl = "INSERT INTO Tabelle(Vorname, Nachname)
VALUES ('Oliver', 'Leisinger')";

if ($Verbindung->query($sql_Befel) === TRUE) {
    echo "Erfolgreich gespeichert";
} else {
    echo "Fehler: " . $sql_Befehl . "<br>" . $Verbindung->error;
}
  • $sql_Befehl kann hier jeglicher Befehl sein, welcher die Datenbank verändert. Dazu gibt es einen tollen Beitrag um sich alle Befehle nochmals anzuschauen.
  • dieses mal liefert die query() einen Boolean-Wert, der sagt, ob es geklappt hat, oder nicht.

Wie sonst auch, lassen sich statt Werten Variablen verwenden, um eine Tabelle beispielsweise zu füllen. Den Inhalt kannst Du dann von Benutzern auf deiner Webseite eintragen lassen. Manchmal ist es jedoch einfacher, gleich mehrere Befehle auf ein mal zu benutzen. Das funktioniert mit mysqli_multi_query().

Mehrere Befehle mit MySQL gleichzeitig senden

Dabei sollte man beachten, dass man nicht einen SELECT zur gleichen Zeit wie einen INSERT oder DELETE Befehl benutzen kann, da SELECT einen anderen Ausgabe-Typ hat.

//Befehle aneinanderknüpfen
$sql_Befehl = "INSERT INTO Tabelle(Vorname, Nachname)
VALUES ('Oliver', 'Leisinger');";
$sql_Befehl .= "INSERT INTO MyGuests (Vorname, Nachname)
VALUES ('Matt', 'Murdock');";
$sq_Befehll .= "INSERT INTO MyGuests (Vorname, Nachname)
VALUES ('Joseph', 'Joestar')";

//Befehle ausführen
if ($Verbindung->multi_query($sql_Befehl) === TRUE) {
    echo "New records created successfully";
} else {
    echo "Error: " . $sql_Befehl . "<br>" . $Verbindung->error;
}
  • Erst werden mehrere Befehle aneinander gereiht, dabei muss man den SQL-Syntax beachten, also kommt ein Semicolon nach jedem Befehl.
  • Man kann diese auch einfach direkt zusammen schreiben, je nachdem was dein Code braucht.
  • Auch wenn alle anderen Befehle ausgeführt wurden, sobald einer nicht ausgeführt werden konnte, wird ein Fehler ausgegeben. Kontrolliere also erst deine Datenbank, welche Befehle geklappt haben, bevor du weitermacht.

Wie bei den anderen Befehlen auch, kannst du entscheiden, ob dein Code Variablen braucht, um Benutzern das bearbeiten zu erlauben, oder ob alles von der Website gehandelt werden soll. Aber man muss vorsichtig sein, zu viele, und unterschiedliche Befehle aneinanderzureihen kann unvorhergesehene Ergebnisse haben. Nun habe ich Dir gezeigt, wie man sich über PHP und MySQL mit einer Datenbank verbindet, die Inhalte davon holt, und wie man die Daten davon ändert. Ich hoffe dieser Artikel hat Dir gefallen. Und dass Du nun das Wichtigste weisst, was Dir dabei helfen wird, mit MySQL Inhalt von Datenbanken auf Websiten zu zeigen. Diese Fähigkeiten kannst Du Verbessern, in dem Du mehr über SQL und PHP lernst und in diesen Bereichen Dein Wissen aufbaust.

Das könnte Dich auch interessieren

Wie HTML5-Validierung funktioniert

Formulare zu validieren war bisher eine aufreibende und anstrengende Angelegenheit für Entwickler. Die Möglichkeit, reines HTML für die Formular-Validierung ...

Die Legende des Internet Halunken

Es war einmal zu einer Zeit, in der das sagenumwobene Internet Einzug in unser aller Leben hielt. Die unendlichen Weiten des Internets, sollten sehr bald jedem ...

Ein Praktikum im Home-Office 

Wie stellst du dir dein Praktikum vor? - Man könnte meinen eine recht typische Frage beim Vorstellungsgespräch und auch in den ersten Tagen hört man diese Fr...