Optionen und weiterführende Links



In der Datenbank befinden sich derzeit 477 Specials. Alle Specials anzeigen...

Von PHP nach MySQL und zurück

Von PHP nach MySQL und zurück

Jetzt werdet Ihr Euch vermutlich fragen, wie Ihr Euer frisch erworbenes Wissen über Datenbanken und SQL in Euren PHP-Skripten nutzen könnt. Dazu bietet Euch PHP eine Reihe von maßgeschneiderten Funktionen für die Kommunikation nicht nur mit MySQL, sondern auch mit anderen DBMS (dBase, FilePro, MS SQL, mSQL, Oracle, PostgreSQL, Sybase, aber auch andere DBMS, die über eine ODBC-Schnittstelle verfügen). Die Funktionen für den Umgang mit MySQL beginnen sinnvollerweise alle mit 'mysql_'.

Die Kommunikation von PHP mit einer Datenbank läßt sich auf ein paar Schritte zusammenfassen

  • Eine Verbindung zur Datenbank öffnen (connect)
  • Ein SQL-Statement an die Datenbank schicken (query)
  • Als Reaktion von der Datenbank ein result set in Empfang nehmen
  • Die Verbindung wieder schließen (close)
  • Das empfangene result set auswerten

Die Verbindung öffnet Ihr mit der Funktion mysql_connect(). Diese Funktion hat bis zu drei Parameter: Der Hostname der MySQL-Datenbank, der Username, unter dem der Zugriff erfolgen soll, und dessen Passwort. Der Username ist meist 'localhost', Username und Passwort hängen von den gesetzten Zugriffsrechten ab. Zurückgeliefert bekommt Ihr einen sogenannten link identifier. Den braucht Ihr später für die Funktion mysql_close(), die die Verbindung wieder schließt.

// Oeffne Verbindung zur Datenbank
$link = mysql_connect('localhost', 'username', 'geheimes_passwort');

// hier passiert gleich der Datenaustausch

// Verbindung wieder schließen
mysql_close($link);

Über eine solche Verbindung könnt Ihr SQL-Statements an die Datenbank schicken. Dazu dient die Funktion mysql_query(), die einen String als SQL-Statement an die Datenbank schickt. Dabei sollte der Query-String kein(!) Semikolon am Ende haben

// Oeffne Verbindung zur Datenbank
$link = mysql_connect('localhost', 'username', 'geheimes_passwort');

// wechsle in die richtige Datenbank
mysql_select_db("checklist");

// Formuliere ein SQL-Statement
// in $autor steht der Name des gewünschten Autors
$query = "SELECT Titel, Verlag FROM serien";
$query += " WHERE Autor='$autor' ORDER BY Titel";
$result = mysql_query($query);

// Verbindung wieder schließen
mysql_close($link);

Die Antwort der Datenbank steht in der Variablen $result in Form eines sogenannten result set. Da dieses result set mehrere Datensätze mit jeweils mehreren Feldern enthalten kann, müssen wir es noch etwas auseinanderpuzzeln. Zuerst stellt sich die Frage, wieviele Datensätze die Datenbank geliefert hat. Das stellt die Funktion mysql_num_rows() fest

echo "Von <b>$name</b> wurden ";
echo mysql_num_rows($result) . " Titel gefunden!";

An die Datensätze und Felder selbst kommt Ihr mit der Funktion mysql_fetch_array() heran. Diese Funktion liefert je einen Datensatz aus dem übergebenen result set als assoziatives Array. Die Feldnamen dienen als Schlüssel. Der erste Aufruf der Funktion liefert den ersten Datensatz im result set, der zweite Aufruf den zweiten, etc.

$num = mysql_num_rows($result);
echo "Von <b>$name</b> wurden $num Titel gefunden!<br>";

while ($i < $num)
  {
  // hole einen Datensatz
  $row = mysql_fetch_array($result);
  // gebe aus
  echo "<b>" . $row['Titel'] . "</b> bei " . $row['Verlag'] . "<br>";
  }

Das erzeugt dann eine Ausgabe wie

<b>Die Beispiel-Serie</b> bei ABComics<br>
<b>Serie, die dritte</b> bei ABComics<br>

Ähnlich wie mysql_fetch_array arbeitet mysql_fetch_object(). Hier bekommt Ihr statt einem assoziativen Array ein Objekt, dessen Eigenschaften Ihr unter den Feldnamen findet.

Nicht jedes SQL-Statement bringt mysql_query dazu, auch ein result set zurückzuliefern: Das ist nur bei SELECTs, SHOWs, DESCRIBEs oder EXPLAINs der Fall. Alle anderen Statements liefern nur true oder false zurück, je nachdem, ob die Operation erfolgreich war oder nicht. Auch die genannten Statements liefern bei einem Mißerfolg übrigens false zurück. Und das führt zu einem Problem, wenn Ihr dieses (ungültige) result set dann weiter auswerten wollt, z. B. mit mysql_num_rows.

Dann nämlich bekommt Ihr die berühmt-berüchtigte Fehlermeldung «Supplied argument is not a valid MySQL result ressource». Das bedeutet einfach, daß die Datenbank mit Eurer letzten Anfrage ein Problem hatte und statt eines gütigen result sets eben false zurücklieferte. Ursache kann ein falsch geschriebener Tabellen- oder Feldname sein, fehlende Berechtigungen für Eure Aktion, ein SQL-Syntaxfehler, ... . Die letzte Fehlermeldung der Datenbank verrät Euch mehr, in Gestalt der Funktion mysql_error()

$query = "SELECT Titel FROM falscher_tabellenname ORDER BY Titel";
$result = mysql_query($query);
echo mysql_error(); // gebe den letzten Fehler in der Datenbank aus


Special vom: 16.01.2003
Autor dieses Specials: Henning Kockerbeck
Die weiteren Unterseiten dieses Specials:
Die reine Lehre - HTML
Stilvoll - CSS
Kleiner Grundkurs Programmieren
Jetzt wird's dynamisch - JavaScript
Die andere Seite der Dynamik - PHP
Neue Gefilde - XML
Weiterführende Links
Zurück zur Hauptseite des Specials


?>