PHP bietet Funktionen für die Zusammenarbeit mit MySQL.
Ein Datenbankzugriff von PHP aus setzt sich zusammen aus:
* Verbindungsaufbau
* SQL-Anfrage
* dem Abholen der Daten
* Verbindungsabbau [optional]
Die wichtigsten Funktionen dafür sind:
mysql_connect Verbindungsaufbau zum MySQL-Server
mysql_select_db Auswahl der Datenbank
mysql_query Ausführen der SQL-Anfrage
mysql_num_rows Anzahl der gefundenen Datensätze (bei SELECT)
mysql_num_fields Anzahl der Felder (bei SELECT)
mysql_affected_rows Anzahl der betroffenen Felder (bei DELETE/UPDATE)
mysql_fetch_row Liefert einen Datensatz als indiziertes Array
mysql_fetch_array Liefert einen Datensatz als assoziatives Array
mysql_fetch_object Liefert einen Datensatz als Objekt
mysql_close Schließt die Verbindung zum Server
Eine typisch Datenbank-Abfrage sieht mit PHP und MySQL so aus:
$config[dbserver] = "localhost"; // Konfigurationsdaten werden in einem Array gespeichert
$config[dbname] = "test"; // dadurch können sie einfacher geändert werden, da der
$config[dbuser] = "user"; // restliche Code nicht nach ihnen durchsucht werden muß
$config[dbpassword]= "geheim";
// 1. Datenbankverbindung aufbauen
$conn = @mysql_connect($config[dbserver], $config[dbuser],$config[dbpassword]);
$result = mysql_select_db($config[dbname]);
// 2. SQL Anfrage ausführen
$sql = "SELECT * FROM kunden";
$result = mysql_query ($sql);
// Wieviel wurde gefunden?
$rows = mysql_num_rows($result);
// 3. Daten auslesen
for ($i=0;$i<$rows;$i++) // Die Ergebnisdatensätze werden in einer Schleife abgeholt
{
$data = mysql_fetch_object ($result);
print "Kundennr = $data->kundennr";
print "Name = $data->name";
}
Man beachte den letzten Teil, in dem die Daten ausgelesen werden: Die Ergebnisse werden nicht als ganzes übergeben, sondern müssen Datensatz für Datensatz ausgelesen werden. Mit mysql_num_rows erhält man die Anzahl der Ergebnisse, die für die for-Schleife benötigt werden.
Ich empfehle mysql_fetch_object oder mysql_fetch_array zu benutzen, so kann über die Feldnamen auf die Werte zugegriffen werden kann:
Bei mysql_fetch_object über $ergebniskennung->feldname,
bei mysql_fetch_array über $ergebniskennung["feldname"]
In der for-Schleife werden die Ergebnisse dann verarbeitet. Falls sehr viele Anweisungen nötig sind, können sie auch an andere Funktionen übergeben werden.
Es kann außerdem zweckmäßig sein, einen Teil dieses Grundgerüsts in eine Funktion oder Klasse auszulagern. Z. B.
// Auslagerung in eine Funktion
function mysql_frage($datenbank, $sql)
{
$config[dbserver] = "localhost";
$config[dbname] = $datenbank;
$config[dbuser] = "user";
$config[dbpassword]= "geheim";
$conn = @mysql_connect($config[dbserver], $config[dbuser],$config[dbpassword]);
$result = mysql_select_db($config[dbname]);
$result = mysql_query ($sql);
return $result;
}
$ergebnis = mysql_frage("mydb", "SELECT tiername FROM haustier");
for($i=0; $i<=$mysql_num_rows($ergebnis); $i++)
{
$datensatz = mysql_fetch_object($ergebnis);
echo $datensatz->tiername;
}
// Auslagerung in eine Klasse
class Datenbank
{
var $db_name;
var $db_host;
var $db_user;
var $db_passwort;
function Datenbank() // Konstruktor
{
$this->dbhost = "host";
$this->dbuser = "user";
$this->dbpasswort = "geheim";
}
function frage($sql)
{
$conn = @mysql_connect($this->dbhost, $this->dbuser, $this->dbpasswort);
$result = mysql_select_db($this->dbname);
$result = mysql_query ($sql);
return $result;
}
}
$haustiere = new Datenbank;
$haustiere->db_name = "haustier";
$ergebnis = $haustiere->frage("SELECT tiername FROM haustier");
for($i=0; $i<=$mysql_num_rows($ergebnis); $i++)
{
$datensatz = mysql_fetch_object($ergebnis);
echo $datensatz->tiername;
}
Vorteil der Auslagerung in eine Klasse ist, daß sie um weitere Funktionen ergänzt werden kann, z. B. um die Ergebnisse gleich in einer bestimmten Art auszugeben.
Falls diese Funktionen in mehreren Skript-Dateien benötigt werden, sollten sie in eine eigene Datei ausgelagert werden, ebenso wie die Zugangsdaten, um dann am besten über include_once() eingebunden zu werden.
Natürlich kann man mit mysql_query nicht nur Suchabfragen machen, sondern jeden Befehl an MySQL schicken, also z. B. auch zum Löschen oder Ändern von Datensätzen.