Archiv der Kategorie: MySQL

MySQL ist ein mächtiges Werkzeug. In MySQL-Datenbanken können zahlreiche Datensätze gespeichert und verwaltet werden. Tipps zum Umgang mit MySQL, auch via PHP, findest Du auf dieser Seite.

13. MySQL-Datenbank Zugriff mit PHP

Du hast in diesem Tutorial bereits gelernt, wie Du mit Arrays komplexere Daten für die Dauer des Skriptablaufs speichern kannst. Auch weißt Du, wie Du Daten in einer Datei speichern kannst.

Doch beide Lösungen reichen häufig nicht aus. Insbesondere dann, wenn es um große Datenmengen geht, die direkt angesprochen werden sollen. Etwa dann wenn Nutzerdaten inklusive Name, E-Mail und letztem Login-Datum gespeichert werden sollen.

In diesem letzten und dreizehnten Teil des PHP Tutorials zeige ich Dir, wie Du mit Hilfe von PDO auf MySQL-Datenbanken zugreifen kannst.

13. MySQL-Datenbank Zugriff mit PHP weiterlesen

MySQL Grundlagen – Tutorial

Dieser Artikel richtet sich an MySQL Anfänger, die schon etwas PHP können, nun aber MySQL lernen möchten, um mit einer MySQL Datenbank zu kommunizieren.

Erst dann wird es nämlich richtig interessant.

Achtung: PHP hat Ende 2013 die integrierte MySQL-Unterstützung als DEPRECATED (veraltet) markiert. Folge daher, bitte diesem MySQL-Tutorial, um auf eine MySQL-Datenbank mit PHP/PDO zuzugreifen.

Was ist eine MySQL Datenbank?

Bei MySQL handelt es sich um die bekannteste Open Source Datenbankverwaltungssoftware für Webauftritte.

Neben MySQL gibt es auch Alternativen wie PostgreSQL.

Mit MySQL können Datenbanken verwaltet werden. Nachdem die Verbindung mit einer Datenbank in PHP hergestellt wurde, kann man Befehle senden.

Innerhalb einer Datenbank gibt es mehrere Tabellen und diese wiederum enthalten eine Struktur (welche Felder gibt es dort und wie können diese genutzt werden?) und Datensätze, die hinzugefügt, ausgelesen oder editiert werden können.

Wer mit MySQL arbeiten möchte, sollte auch phpMyAdmin kennen lernen. Viele Hoster verwenden dies um die Datenbank(en) zu verwalten, so kannst du zum Beispiel dort alle Tabellen einsehen, neue Einträge verwalten etc.

Alles dies, kannst du mit PHP machen. Kein Wunder, denn genau so arbeitet phpMyAdmin auch.

Die Datenbank Verbindung

Bevor du irgendetwas mit einer Datenbank machen kannst, musst du eine Verbindung mit der Datenbank herstellen.

Zunächst solltest du überlegen, ob du deine Datenbank mit utf-8 oder einem anderen Zeichensatz nutzen möchtest. Ist dies der Fall muss dies für die Datenbank (z.B. mit phpMyAdmin) festgelegt werden, deine PHP Dateien müssen auch mit dem utf-8 Zeichensatz gespeichert werden und ein kleiner Code Schnipsel muss nach der Verbindungsherstellung eingefügt werden.

Wenn du jetzt erstmal ins Grübeln kommst, was utf-8 überhaupt ist, solltest du den gekennzeichneten Code Schnipsel erst einmal weglassen und dich später damit beschäftigen.

$db_connection = mysql_connect('localhost', 'web123', 'db-passwort') or die ('Bei dem Verbindungsaufbau zur Datenbank sind Probleme aufgetreten!');
mysql_select_db('web123_db1') or die ('Bei dem Verbindungsaufbau zur Datenbank sind Probleme aufgetreten!');

mysql_query("SET NAMES 'utf8'"); // Dieser Code wird bei der Verwendung von utf-8 benötigt.

Das macht der Code: Zunächst wird eine „normale“ (es gibt auch noch persistente, aber die wollen wir erstmal ignorieren) Verbindung zur Datenbank hergestellt.

Diese befindet sich am Ort localhost und die Logindaten lauten web123 und das Passwort db-passwort. Wenn die Verbindung fehlgeschlagen ist wird durch das die() ein Abbruch und eine Fehlermeldung erzeugt.

Anschließend wird die Datenbank web123_db ausgewählt, auch hier bricht das die() ab, wenn die Datenbank nicht ausgewählt werden konnte.

Die Verbindung wird am Ende eines Skriptes automatisch geschlossen, wenn du aber innerhalb der PHP Datei mit mehreren Verbindungen arbeitest, kannst du eine Verbindung mit mysql_close($db_connection); schließen.

Struktur der Datenbank anlegen

Damit Datensätze gespeichert werden benötigt die Datenbank zunächst Tabellen und diese wiederum eine Struktur.

Das machst du am besten mit phpMyAdmin, sodass z.B. so eine Tabelle dabei herauskommt:

id BIGINT (99), UNSIGNED, NULL, auto_increment, primary
name VARCHAR (255)
eigenschaft VARCHAR (255)

Öffne dazu einfach phpMyAdmin, wähle die Datenbank aus und lege eine neue Tabelle an, in diesem Fall heißt sie namen, anschließend benennst die (i.d.F. sind es 2) Felder, also: Feld = id, Typ = BIGINT, Länge = 99, Attribute = UNSIGNED, NULL = NULL, extra = auto_increment und einen Haken bei dem Schlüssel.Bei diesem Feld handelt es sich um den sogenannten Primärschlüssel, der durch auto_increment mit jedem neuen Eintrag um 1 erhöht werden. Der erste Eintrag hätte also den Wert id = 1, der zweite id = 2 usw.Nun musst du nur die Einstellungen für das zweite Feld name und das dritte eigenschaft festlegen und die Eingaben speichern. Fertig!

Neuen MySQL Datensatz erstellen

Die neu erstellte Tabelle ist zunächst leer. Das wollen wir ändern.

Irgendwann nach dem Herstellen der Datenbank Verbindung (s.o.) kannst du den mysql_query() Befehl von PHP verwenden, die Datenbank darf aber noch nicht durch MySQL geschlossen werden.

Mit INSERT kann ein neuer Datensatz erstellt werden, das sieht in unserem Beispiel dann so aus:

mysql_query("INSERT INTO namen (name, eigenschaft) VALUES ('peter', 'humorvoll')");

Wir sagen, dass in die Tabelle namen die Felder name, eigenschaft mit den Values (=Werten) ‚peter‘, ‚humorvoll‘ beschrieben werden sollen.

Nach dem gleichen System können auch noch weitere Felder gleichzeitig beschrieben werden, die Reihenfolge der Werte muss dabei so sein wie bei den Feldern, soll heißen, wenn name als erstes kommt muss der Wert für den Namen in den zweiten Klammern auch als erstes kommen.

Natürlich kannst du auch Variablen in die Datenbank schreiben:
mysql_query("INSERT INTO namen (name, eigenschaft) VALUES ('".mysql_real_escape_string($name)."', '".mysql_real_escape_string($eigenschaft)."')");

Gewöhne dir am besten gleich an durch das Nutzen von mysql_real_escape_string() sicher zu stellen, dass eine Manipulation ausgeschlossen ist, wenn es sich um eine Eingabe vom Nutzer handelt. Diese Funktion setzt ein „“ vor alle Zeichen, die den Query manipulieren könnten.

Auch bei vermeintlichen Zahlen die vom Nutzer kommen, solltest du überprüfen ob es sich um Zahlen handelt. Solltest du dies nicht tun, kann eventuell jeder beliebige MySQL Queries ausführen.

Datensatz verändern

Wenn wir den Datensatz verändern wollen gibt es UPDATE genau für diesen Zweck.

Mit dem WHERE Statement wählen wir zu dem die betroffenden Datensätze aus, dabei können mehrere durch OR und AND zusammenhängende Kriterien angegeben werden:
mysql_query("UPDATE namen SET name = 'thomas', eigenschaft = 'nicht humorvoll' WHERE id = 1 AND name = 'peter' OR eigenschaft = 'humorvoll'");

Hier werden Änderungen in der Tabelle namen durchgeführt. Wir ändern in allen Datensätzen, die die id 1 haben und wo name den Wert ‚peter‘ trägt oder wo eigenschaft auf ‚humorvoll‘ gesetzt ist, name zu ‚thomas‘ und eigenschaft zu ’nicht humorvoll‘ um.

Einen MySQL Datensatz auslesen

Fehlt uns noch eine wichtige Grundlage, das Auslesen von Datensätzen.

Wenn du mehrere Datensätze auslesen möchtest, kommen while-Schleifen zum Einsatz, bei dem Auslesen eines einzelnen Datensatzes, benötigen wir dies nicht.

Grundsätzlich gibt es zwei interessante Möglichkeiten, wir können die Ausgabe als Array speichern (z.B. mysql_fetch_assoc()) oder als Objekt (mysql_fetch_object()). Du solltest besser die erste Möglichkeit verwenden.

$data = mysql_fetch_assoc(mysql_query("SELECT * FROM namen WHERE id = 1 LIMIT 1"));
Durch echo $data[’name‘]; würde uns jetzt zum Beispiel der Wert aus der Spalte name (i.d.F. ‚thomas‘ ausgegeben werden). Denn wir wollen alle (* = alle) Spalten aus der Tabelle namen, wo der id = 1 ist. Außerdem wollen wir, dass maximal ein (LIMIT 1) Datensatz abgefragt wird.

Anstelle von * können übrigens auch die einzelnen Spalten (z.B. name, eigenschaft) eingeben werden. Dies empfiehlt sich auch um nur die Daten auszulesen, die auch wirklich benötigt werden.

Mehrere MySQL Datensätze auslesen

Mehrere MySQL Datensätze können zum Beispiel so ausgelesen werden:

$data = mysql_query("SELECT name FROM namen ORDER by id ASC LIMIT 5");
while ($value = mysql_fetch_assoc($data)) {
echo $value['name']."";
}

Wir würden nun – sofern es diese gibt – maximal 5 Datensätze auslesen und zwar so, dass die niedrigste id am Anfang kommt und dann aufsteigend sortiert wird, DESC statt ASC bewirkt das Gegenteil.

Anschließend wird nun pro Zeile ein Name ausgegeben.

Fazit zu den MySQL Grundlagen

MySQL ist gar nicht so schwer, gerade wenn du dich ein bisschen damit beschäftigst und selbst die ersten Befehle getippt hast, wirst du dich bestimmt schnell einfinden.

Lasse aber niemals den Aspekt der Sicherheit außer Acht wenn es um Benutzereingaben geht (siehe oben), sonst hat theoretisch jeder Benutzer die Möglichkeit seinen eigenen Befehl (er kann sich zum Beispiel zum Admin bei einer Benutzerverwaltung ernennen) auszuführen und das kann Böse enden.

Eine Alternative MySQL sicherer zu machen sind Mysqli Statements oder prepared Statements mit PDO-MySQL, die du dir später einmal genauer anschauen kannst