Suche


drucken PDF
Das Interface von MySQL verwenden


Einleitung

PHP erlaubt ein sehr einfaches Interfacing mit einer grossen Anzahl an Datenbanken. Wenn eine Datenbank nicht direkt von PHP unterstützt wird, dann kann sie mit Hilfe eines ODBC Treibers verwendet werden; dies ist der Standardtreiber um mit Datenbanken zu kommunizieren.

Die Kommunikation mit den Datenbanken erfolgt über SQL Abfragen, einer von allen Datenbankverwaltungssystemen erkannten Sprache der vierten Generation.

In den folgenden Beispielen ist das verwendete System zur Datenbankverwaltung MySQL, ein kostenloses und schnelles Datenbankverwaltungssystem, das (unter anderem) unter Linux funktioniert. Da die Mehrzahl der Webserver (darunter der bekannte Apache) unter Linux betrieben werden, ist MySQL das am häufigsten mit PHP verwendete Datenbankverwaltungssystem.


Deklaration der Variablen

Der erste Schritt besteht darin, die Variablen die die Verbindung zur Datenbank ermöglichen zu deklarieren. Diese Variablen sind:

$user: Der Benutzername
$passwd: Das Passwort
$host: Der Host (die Maschine auf der das Datenbankverwaltungssystem installiert ist)
$bdd: Der Name der Datenbank

Erinnerung: Die Variablen sind für Ihre Besucher nicht sichtbar, da das Skript mit der Erweiterung .php systematisch vom Webserver interpretiert wird.


Diese Variablen sind eigentlich die Parameter der Funktion, die die Verbindung zur Datenbank erlaubt. Es ist demnach möglich, die Werte dieser Variablen direkt in jeder Funktion zur Verbindung zu übergeben, aber dies wird schnell störend wenn zum Beispiel ein Passwort geändert wird. Die eleganteste Lösung wäre, diese Werte in einer eigenen Datei zu speichern, da man dann die Werte für alle Dateien die darauf verweisen in einem Mal ändern kann.


Die Basisfunktionen

PHP bietet eine grosse Auswahl an Funktionen, mit denen man Datenbanken bearbeiten kann. Unter diesen sind 4 ganz besonders wichtig:

Die Funktion zur Verbindung mit dem Server, die Funktion zur Auswahl der Datenbank, die Funkrion für Abfragen, die Funktion zum trennen.

Beim Datenbankverwaltungssystem MySQL heissen diese Funktionen: mysql_connect, mysql_select_db, mysql_query, mysql_close.

Die Fehlerverwaltung

Manche dieser Funktionen geben einen Wert zurück mit dem man den Zustand der Verbindung erkennen kann, so kann das Skript abgebrochen werden um kaskadierende Fehler zu vermeiden. Diese Operation kann auf zwei verschiedene Arten durchgeführt werden:

Die Speicherung des Ergebnisses der Ausführung der Funktion in einer Variablen. Zum Beispiel:

$connect = mysql_connect($host,$user,$passwd);

Die Verwendung der Funktion die() bei einem Fehler bei der Ausführung. Wenn die Funktion den Wert 0 zurückgibt (das heisst wenn ein Fehler aufgetreten ist), gibt die Funktion die() ("stirbt") eine Fehlermeldung aus. Zum Beispiel:

mysql_connect($host,$user,$passwd)
or die("Fehler bei der Verbindung zum Server $host");


Verarbeitung der Ergebnisse

Wenn man eine Auswahlanfrage mit Hilfe der Funktion mysql_query durchführt, dann ist es essenziell das Ergebnis der Abfrage (die Daten) in einer Variable zu speichern, die man normalerweise $result nennt.

Diese Variable enthält jedoch die Gesamtheit der Daten und ist so nicht direkt nutzbar. Deshalb verwendet man die Funktion mysql_fetch_row(), die die Ergebniszeilen in Spalten aufteilen (zum Beispiel Name, Adresse...) und Sie einer Variable in der Reihenfolge des Eingangs zuteilt.

Nehmen wir zum Beispiel eine "Links" genannte Tabelle mit dem Namen und der URL von Webseiten. Es ist möglich, die Gesamtheit der Einträge auszugeben und diese in einer Tabelle anzuzeigen:

<html>
<head>
<title>Links</title>
<head>
<body>

<table border="1" cellpadding="0" cellspacing="0">

<tr>
<th>Name der Seite</th>
<th>URL</th>
</tr>

<?php
Deklaration der Verbindungsparameter
$host = ihre_maschine;
Normalerweise ist die Maschine localhost,
das heisst die Maschine auf der das Skript liegt
$user = ihr_login;
$bdd = name_der_datenbank;
$passwd = passwort;

Verbindung zum Server
mysql_connect($host, $user,$passwd) or die("Fehler bei der Verbindung zum Server");
mysql_select_db($bdd) or die("Fehler bei der Verbindung zur Datenbank");

Erstellung und Versand der Abfrage
$query = "SELECT name,url FROM sites ORDER BY name";
$result = mysql_query($query);

Speichern der Ergebnisse
while($row = mysql_fetch_row($result)){
$Name = $row[0];
$Url = $row[1];
echo "<tr>

<td><a href="$Url">$Name</a></td>

<td>$Url</td>

</tr>
";
}

Trennung von der Datenbank
mysql_close();
?>

</tr>
</table>
</body>
</html>

In diesem Besipiel geben die Anfragen die Felder Name und Url zurück. Die Funktion mysql_fetch_row() analysiert also jede Zeile des Ergebnisses der Abfrage und speichert die Spalten in der Tabelle row[]. So wird das Feld Name in row[0] und url in row[1] gespeichert. Ausserdem fügt man normalerweise mysql_fetch_row() in eine while Schleife ein, so dass die Gesamtheit der Zeilen des Ergebnisses verarbeitet wird. Wenn es keine Zeilen mehr zu verarbeiten gibt, dann wird die while Schleife geschlossen und der Interpreter führt die folgenden Befehle aus.


Ein Null-Resultat aufspüren

Es kann nützlich sein vor dem Hinzufügen von Daten in eine Tabelle das Vorhandensein eines Eintrags in der Tabelle zu überprüfen, um die Speicherung von Dubletten zu verhindern. Dies kann man mit einer SQL Abfrage mit einem SELECT Befehl und einer WHERE Klausel machen, die es erlauben das Vorhandensein (oder das Nichtvorhandensein) eines der Abfrage entsprechenden Eintrags zu überprüfen. Das Nichtvorhandensein eines Ergebnisses zeigt sich in der Rückgabe von Null der Funktion mysql_fetch_row(). Hier ein Beispiel der Ausgabe einer solchen Abfrage, und für den anderen Fall eine Erkärung das kein entsprechender Eintrag gefunden wurde (der HTML Code in den der PHP Code implementiert werden muss wurde extra weggelassen):

<?php

Deklaration der Verbindungsparameter
$host = name_der_maschine;
Normalerweise ist die Maschine localhost
das heisst die Maschine auf der das Skript liegt
$user = ihr_login;
$bdd = name_der_datenbank;
$passwd = passwort;

Verbindung zum Server
mysql_connect($host, $user,$passwd) or die("Fehler bei der Verbindung zum Server");
mysql_select_db($bdd) or die("Fehler bei der Verbindung zur Datenbank");

Erstellen und Versand der Abfrage
$query = "SELECT name,url FROM sites ORDER BY name";
$result = mysql_query($query);

Speichern der Ergebnisse
if (!mysql_fetch_row($result)) {
echo "Kein Eintrag entspricht
";
}
else {
while($row = mysql_fetch_row($result)){
$Name = $row[0];
$Url = $row[1];
echo "<tr>

<td><a href="$Url">$Name</a></td>

<td>$Url</td>

</tr>
";
}
}

Trennung von der Datenbank
mysql_close();
?>