Kampis Elektroecke

MySQL

Raspberry Pi

Hier zeige ich, wie auf dem Raspberry Pi eine MySQL Datenbank anlegt und diese mittels Konsole oder PHP verwalten werden kann. Diese Datenbanken kann zum Speichern verschiedener Daten verwenden, wie z. B. Sensorwerte verwendet werden.

MySQL auf dem Raspberry Pi:

Für die Verwaltung un den Zugriff auf die Datenbank soll MySQL verwendet werden. Dieses muss erst installiert werden.

Dadurch wird ein MySQL Server- und eine Clientsoftware, sowie eine PHP-API für MySQL installiert. Abschließend muss der Raspberry Pi einmal neu gestartet werden.

MySQL in der Konsole:

Der MySQL-Server kann über die Konsole gesteuert werden, indem SQL-Befehle an den Server gesendet werden. Auf die selbe Weise funktioniert später auch der Zugriff mittels PHP. Nach dem Öffnen der Konsole muss man sich mit einem Benutzernamen anmelden.

Hierfür wird das Passwort benötigt, welches bei der Installation des MySQL-Servers vergeben wurde. Wenn die Anmeldung erfolgreich war “verlasst” ihr die Konsole des Betriebssystems und kommuniziert direkt mit dem MySQL-Server (erkennbar an dem neuen Prompt).

Dieser Modus kann durch die die Tastenkombination Strg + C oder durch den Befehl quit wieder verlassen werden.
Als erstes wird eine neue Datenbank erstellt. Diese Datenbank wollen wir Kontaktdaten nennen.

Über den Befehl

werden alle vorhandenen MySQL Datenbanken aufgelistet. Damit eine Datenbank benutzt werden kann, muss diese zuerst ausgewählt werden.

Um Daten in einer Datenbank speichern zu können wird eine Tabelle benötigt. Diese wird folgendermaßen angelegt.

Die gewünschte Tabelle benötigt 5 Spalten, die wie folgt benannt werden:

  • Nummer
  • Vorname
  • Nachname
  • Stadt
  • Geburtstag

Den Namen der Tabelle soll Persönlich lauten. Dementsprechend lautet die Syntax für die Tabelle wie folgt:

Nachdem die Tabelle erstellt wurde, kann der erste Datensatz gespeichert werden. Dies erfolgt mit dem INSERT-Befehl:

Mit Werten gefüttert lautet der Befehl also:

Das Feld Nummer muss nicht beschrieben werden, da bei der Typenvergabe des Feldes der Zusatz Auto Increment hinzugefügt wurde. Dadurch wird das Feld Nummer bei jedem neuen Datensatz um eins hochgezählt.
Weitere Daten werden analog eingefügt.

Eingegebene Datensätze können dann mit dem Befehl

ausgegeben werden.

Auslesen der Datenbank mittels PHP:

Der Zugriff über PHP auf die Datenbank ähnelt dem Zugriff auf eine Datei in einer beliebigen Programmiersprache (z. B. C oder Python). Als erstes wird mit den Zeilen

versucht eine Verbindung zur MySQL Datenbank aufzubauen. Hierfür werden die Benutzerdaten des sich zu verbindenden Accounts benötigt. Falls die Anmeldung aus irgendeinem Grund fehl schlägt springt PHP in die or-Verzweigung, gibt die Fehlermeldung aus und beendet die Ausführung. Wenn erfolgreich eine Verbindung aufgebaut wurde, wird die Kennung dieser Verbindung unter DB_Connect gespeichert.

Anschließend wird die Datenbank ausgewählt.

Es wird geprüft ob die Datenbank vorhanden ist, wenn ja wird die Kennung unter DB_Select gespeichert, wenn nicht wird ein Fehler ausgegeben und die Ausführung wird beendet.

Wenn die Datenbank vorhanden ist, wird die Anfrage an die Datenbank vorbereitet. Dazu wird der Befehl, der später ausgeführt werden soll, in der Variable Tabelle gespeichert:

Danach wird die Anfrage abgesetzt.

Der Rückgabewert, der in der Variable DB_Abfrage gespeichert ist, ist die Kennungsnummer für die Anfrage an die Datenbank die gestellt wurde. Jetzt werden die Datensätze ausgelesen. Dazu wird die Funktion mysql_fetch_array() genutzt.

Das Auslesen wird so oft wiederholt, bis die Funktion mysql_fetch_array() ein FALSE zurück gibt, sprich keine Datensätze mehr vorhanden sind. Der aktuelle Datensatz wird dabei bei jedem Durchlauf in der Variable zeile gespeichert. Es ergibt sich der folgende Ablauf:

  1. Die erste Anfrage wird gestellt, indem der Funktion die Kennunsnummer der Anfrage übergeben wird
  2. Der erste Datensatz wird ausgelesen und unter zeile gespeichert
  3. Die Funktion mysql_fest_array() gibt ein TRUE zurück
  4. Die erste Tabellenzeile (tr) wird erstellt
  5. In der ersten Spalte (td) wird der Wert vom Array zeile gespeichert dem das Element “Nummer” zugeordnet wurde (das ist die 1)
  6. In der zweiten Spalte wird der Wert vom Array zeile gespeichert dem das Element Vorname zugeordnet wurde (das ist der Name Hans)
  7. So geht es weiter, bis alle fünf angegebenen Daten ausgegeben wurde (auf die Telefonnummer habe ich verzichtet)
  8. Die while-Schleife beginnt erneut. Diesmal wird der zweite Datensatz unter zeile gespeichert und die Ausgabe ist identisch mit der ersten, außer das eine neue Zeile begonnen wird
  9. Dies geschieht solange, wie Datensätze vorhanden sind. Ist kein Datensatz mehr vorhanden gibt die Funktion mysql_fetch_array() ein FALSE zurück und die While-Schleife wird verlassen

Anschließend wird die Anfrage mittels

beendet und die Verbindung zur Datenbank getrennt:

Die Ausgabe sieht wie folgt aus:

Die PHP-Datei für die Webseite kann in meinem GitLab-Repository heruntergeladen werden.

→ Zurück zu Raspberry Pi


Letzte Bearbeitung: 11.10.2018

5 Kommentare

  1. Hallo,

    ich habe mir Ihre Anleitung zur Verbindung einer Datenbank mit einem Raspberry Pi durchgelesen und selbst angewandt.
    Ein Problem habe ich allerdings, vielleicht könnten Sie mir weiterhelfen.
    Wenn ich das PHP Skript im Webbrowser öffne, wird keine Datenbank ausgegeben. Ich vermute, das das Skript keine Verbindung zur Datenbank herstellen kann, weil evtl. der Benutzername, das Passwort oder die IP Adresse des Servers falsch eingegeben wurde.
    Welchen Benutzernamen muss ich genau eingeben? (Von der Datenbank, also “root”, oder dem Raspberry, also “pi” ?)
    Anstatt “localhost” kann die auch eine IP des Raspberry eingeben oder?

    Mfg Martin

    1. Hallo Martin,

      für den Benutzernamen musst du den Benutzernamen der Datenbank angeben (“root” in deinem Fall).
      Ob du für “localhost” auch die IP-Adresse angeben kannst, weiß ich aus dem Stehgreif nicht. Probier mal erst es mittels “localhost” zum laufen zu kriegen und dann kannst du immer noch wechseln :)

      Gruß
      Daniel

  2. Hallo,

    habe localhost, aber auch die IP des Raspberry genommen, den Benutzer “root” angegeben, dennoch funktionierts leider nicht. Um den Fehler etwas einzugrenzen, habe ich eine echo Ausgabe direkt, nach der Verbindung angegeben, um zu sehen, ob das Skript bis dahin überhaupt läuft. Und siehe da, nach der Verbindung zur Datenbank, wird das Skript nicht weiter ausgeführt. Also liegts an dem Verbindungsaufbau.
    Muss ich beim Raspberry irgendwelche Einstellungen vornehmen, damit die Verbindung einwandfrei funktioniert?

    Mfg Martin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.