Websiteentwicklung: PHP: MySQL
Kurze Einführung in MySQL
[Bearbeiten]MySQL ist eines der populärsten Datenbanksysteme der Welt, nicht zuletzt, da es ein Open Source Projekt ist. Egal ob privat oder geschäftlich - heute ist MySQL bereits über elf Millionen (Quelle: http://www.mysql.com/company/factsheet.html) mal installiert. Das System ist einfach aufgebaut, sehr schnell und die Grundzüge sind vergleichbar einfach zu verstehen. MySQL wird von Counter, über Gästebücher und Suchfunktionen, bis hin zu komplexen Content Management Systemen oder Online-Shops verwendet.
Eine einzelne Datenbank kann man sich als Sammlung von Tabellen vorstellen. Jede Tabelle hat wie gewohnt Zeilen und Spalten. Die Spalten können benannt werden, aber die Datensätze in der Tabelle (also die Zeilen) sind nicht geordnet. In einer Zelle können Zahlen, Text-Strings und auch Boolean Werte gespeichert werden (binäre Dateien, wie beispielsweise Bilder können ebenfalls gespeichert werden - davon wird aber abgeraten). An dieser Stelle wird gezeigt wie es mit PHP möglich ist Tabellen zu erstellen und diese dann mit Daten zu füllen.
Die Kommunikation mit einer MySQL-Datenbank erfolgt über die Abfragesprache SQL – siehe auch Einführung in SQL.
Verwendung von MySQL
[Bearbeiten]Warnung Das Verwenden der klassischen MySQL-Funktionen ist nicht empfehlenswert, da sie veraltet und unsicher sind.
Methodenübersicht
[Bearbeiten]PHP bietet eine Vielzahl an Funktionen, um mit dem Datenbanksystem zu kommunizieren. Hier werden nur die gebräuchlichsten erklärt:
mysql_connect([string Server[, string Benutzername[, string Benutzerkennwort]]])
Erstellt eine neue Verbindung zum MySQL-Server. Dabei müssen der Server und optional der Benutzername und das Benutzerkennwort angegeben werden.
mysql_select_db(string database_name[, resource link_identifier])
- Nach einem Verbindungsaufbau wählt diese Funktion die Datenbank aus, in der wir mit PHP arbeiten wollen.
mysql_query(string Anfrage[, resource Verbindungs-Kennung])
- Einer der wichtigsten Befehle: Sendet eine Anfrage an den MySQL-Server. Mit diesen Anfragen können Datensätze eingefügt, ausgelesen und gelöscht werden. Außerdem können Sie hier die Tabellen erstellen, bearbeiten und löschen.
mysql_error([resource link_identifier])
- Diese Funktion liefert die Fehlermeldung zurück, falls eine andere MySQL-Funktion einen Fehler erzeugt hat bzw.false
zurücklieferte, was auf einen Fehler hinweist. Siehe dazu http://faq.php-q.net/#mysql.
mysql_fetch_assoc(resource Ergebnis-Kennung)
- Liefert den aktuellen Datensatz, der unter der Ergebniskennung aufgerufen wurde. Ein weiterer Aufruf dieser Funktion liefert den nächsten Datensatz der Ergebnistabelle. Wenn kein Datensatz mehr vorhanden ist wirdfalse
zurückgeliefert.
mysql_close([resource Verbindungs-Kennung])
- Schließt die Verbindung zum MySQL-Server mit der angegebenen Verbindungs-Kennung. Diese Kennung ermöglicht es, mehrere Verbindungen auf einmal zu erstellen. Wird die Verbindungs-Kennung weggelassen, wird die zuletzt geöffnete Verbindung geschlossen.
mysql_real_escape_string(string unescaped_string[, resource link_identifier])
- Maskiert einen String zur sicheren Verwendung in einer Abfrage. Sonder- und Steuerzeichen wie " (Anführungszeichen) werden maskiert um eine Manipulation des SQL-Ausdrucks durch externe Eingaben zu verhindern.
Beispiele
[Bearbeiten]<?php
// Verbindung erstellen, bei Fehler diesen ausgeben:
$link = mysql_connect('localhost', 'user', 'passwort') or die(mysql_error());
// Datenbank auswählen
mysql_select_db('test') or die(mysql_error());
// Tabelle adresse mit den Spalten id, name, strasse, ort und tel erstellen: (adress_id ist Primärschlüssel)
mysql_query('CREATE TABLE adresse (
adress_id INT UNSIGNED AUTO_INCREMENT ,
name VARCHAR(100) ,
strasse VARCHAR(100) ,
ort VARCHAR(100) ,
tel VARCHAR(20) ,
PRIMARY KEY (adress_id)
)
') or die(mysql_error());
// Datensatz einfügen, bei Fehler diesen ausgeben:
mysql_query('INSERT INTO
adresse(name, strasse, ort, tel)
VALUES (
"Hans Meier",
"Bahnhofstrasse 1",
"4391 Testingen",
"010 100 01 01")
') or die (mysql_error());
// Datensatz auslesen:
$daten = mysql_query('SELECT
name,
tel,
ort
FROM
adresse
') or die (mysql_error());
// Datensatz in array speichern:
$daten = mysql_fetch_assoc($daten);
// Tabelle löschen:
mysql_query('DROP TABLE adresse');
// Verbindung schliessen:
mysql_close($link);
// Array ausgeben:
echo "<pre>";
var_dump($daten);
echo "</pre>";
?>
Achtung: Wenn mehr als ein Datensatz ausgewählt wird, läuft die Speicherung in einem Array anders. Denn es wird jeweils nur immer eine einzige Zeile in das Array gespeichert.
Ein Beispiel hierfür wäre: (Ausschnitt)
<?php
// Connect, SelectDB und disconnect siehe oberes Beispiel
// Datensätze in 3-dimensionalem Array speichern:
while ($row = mysql_fetch_assoc($daten))
$daten[] = $row;
// Array ausgeben:
echo "<pre>";
var_dump($daten);
echo "</pre>";
?>
Verwendung von MySQLi
[Bearbeiten]MySQLi ist eine verbesserte (das i steht für improved) Erweiterung von PHP zum Zugriff auf MySQL-Datenbanken. Sie ist im Gegensatz zur ursprünglichen Variante objektorientiert, lässt sich aber auch prozedural benutzen. Ein wesentlicher Vorteil ist, dass mithilfe von sogenannten Prepared Statements SQL-Injection-Angriffe verhindert werden können.
Verwendung von PDO
[Bearbeiten]PDO (PHP Data Objects) stellt eine Abstraktionsebene für den Datenbankzugriff dar und ermöglicht einen einheitlichen Zugang von PHP auf unterschiedliche SQL-basierte Datenbanken, wie zum Beispiel MySQL, PostgreSQL oder SQLite. Dabei wird unter anderem der Portierungsaufwand beim Umstieg auf eine andere Datenbank minimiert. Es wird nur der Datenbankzugriff abstrahiert, nicht die Datenbank selbst. Für die zu nutzende Datenbank wird ein datenbankspezifischer Treiber benötigt.
-> Siehe Datenbankzugriff mit PDO