Daten ausgeben
Abfrage endlich durchführen
Zuerst musste ich die Verbindung zu Server und Datenbank herstellen, dann eine Auswahl formulieren. Jetzt will ich die Abfrage endlich durchführen bzw. zur Datenbank senden, um die Daten darauf hin zu empfangen. In welcher Form, als Objekt, Array oder String ich die Daten will, kann ich der Querry (Abfrage) mitgeben. Zum Schluss kann ich die Daten aus dem Zwischenspeicher freigeben und die Datenbank schliessen.
Wieder erstelle ich eine Variable ($abfrage) in der die Abfrage meiner Wahl gespeichert wird. Die Abfrage erfolgt mit dem Befehl 'mysql_query'.
(Angenommen die Wahl sah so aus: <?php $wahl = "SELECT name, bluetezeit FROM blumen"; ?>.)
mysql_query()
<?php
$abfrage = mysql_query($wahl);
echo "$abfrage";
?>
Das Echo ist im Moment noch sardonisch:
Für die Anweisungen SELECT, EXPLAIN, SHOW oder DESCRIBE liefert mysql_query() eine Ressourcen-Kennung oder FALSE zurück. Diese (in $abfrage gespeichert) kann ich jetzt einsetzen, um eine Ausgabe zu erzeugen.
Anzahl Datensätze ausgeben
Datensätze sind Zeilen oder Linien in Tabellen.
Abfrage übergeben und ausgeben
Was erwarte ich von der Abfrage? Die SELECT Anweisung gab mir ja die Freiheit durch den * alle Datensätze einer Tabelle auszuwählen. Zwar habe ich vielleicht die Daten auf die Spalte (Kolonne) 'name' eingegrenzt und mit WHERE eine Einschränkung bezüglich der Zeilen gemacht, aber die Wahl könnte noch immer mehrere Datensätze treffen (ausser die Spalte enthielte nur UNIQUE artige Einträge, das weiss man aber jetzt noch nicht). Ich muss also ein Objekt erzeugen, welches den Inhalt einer einzelnen Zelle, einer Zeile oder mehrerer Datensätze enthält. Dazu übergebe ich die Ressourcen-Kennung einer Funktion, welche ein solches Objekt erstellt.
Resultat erzeugen
mysql_result()
Gibt einen Zellinhalt aus. Erwartet als zweiten Parameter nach einem Komma den Index, Namen oder Alias des Feldes. In diesem Beispiel will ich das erste gefundene Feld ausgeben, da wir es mit einem Array zutun haben, hat dieses den Index 0.
Zeile erzeugen
mysql_fetch_row()
Liefert einen Datensatz als indiziertes Array. Erwartet keinen zweiten Parameter. Ein weiterer Aufruf liefert den nächsten Datensatz aus dem Ergebnis, der Zeiger in der Ressource springt also weiter.
Objekt erzeugen
mysql_fetch_object()
Aus der selben Abfrage erstelle ich ein weiteres Array-Objekt namens $zeilen.
Der Befehl um dieses Array-Objekt zu erstellen ist: mysql_fetch_object
Das Array-Objekt gebe ich in einer while-Schleife aus, die sich so oft wiederholt, wie es Datensätze (Zeilen) in der Abfrage hat.
Beachte, dass es mehr Datensätze hätte als im Folgenden dargestellt, aber der Zeiger ist durch obige Ausgaben innerhalb der Ressource bereits fortgeschritten.
<?php
while($zeilen = mysql_fetch_object($abfrage))
{
echo "$zeilen->name", " blüht im ";
echo "$zeilen->bluetezeit","<br>";
}
?>
Über $zeilen-> und den spaltennamen werden die Werte angesprochen.
Tiger Orchidee blüht im Winter
Zurückspuhlen
mysql_data_seek()
Jetzt sind wir definitiv am Ende angelangt, am Ende der Abfrage. Zurückspuhlen ist aber möglich, ich kann sogar mit dem Datensatzzeiger (Handel) zu einer bestimmten Zeile springen. Die Zeilen sind ja nummeriert, wie ein Array, die erste Zeile ist also die 0.
Array erzeugen
mysql_fetch_array()
while($linien = mysql_fetch_array($abfrage))
{
print_r($linien);
echo "<br />";
}
Array ( [0] => Wald Veilchen [name] => Wald Veilchen [1] => Herbst [bluetezeit] => Herbst )
Array ( [0] => Tulpe [name] => Tulpe [1] => Frühling [bluetezeit] => Frühling )
Array ( [0] => Tiger Orchidee [name] => Tiger Orchidee [1] => Winter [bluetezeit] => Winter )
Assoziativen Array erzeugen
Man sollte sich angewöhnen, mit den assoziativen Spaltennamen zu arbeiten. Sollte der Datenbank irgendwo eine Spalte hinzugefügt werden, werden in der Ausgabe noch immer die richtigen Spalten benutzt. Hätte man mit Indizes gearbeitet, dann hätte sich wohl alles verschoben. Den Unterschied erzeugt der Parameter: MYSQL_ASSOC.
while($linien = mysql_fetch_array($abfrage,MYSQL_ASSOC))
{
print_r($linien);
echo "<br />";
}
Array ( [name] => Wald Veilchen [bluetezeit] => Herbst )
Array ( [name] => Tulpe [bluetezeit] => Frühling )
Array ( [name] => Tiger Orchidee [bluetezeit] => Winter )
Abfrage schliessen
mysql_free_result()
Die Daten aus der Abfrage müssen wieder frei gegeben werden, bevor eine neue Abfrage erfolgen kann:
<?php
mysql_free_result($abfrage);
?>
Logischerweise dürfte das 'mysql_free_query' heisen - tut es aber nicht.
Verbindung trennen
mysql_close()
Wenn man verschiedene Datenbanken abfragen will, muss vor dem Verbindungsaufbau zur nächsten, zuerst die Verbindung zur letzten Datenbank getrennt werden. Da ich die Verbindung in einer Variablen namens '$verbindung' abgelegt hatte, geht das einfach so:
<?php
mysql_close($verbindung);
?>
Soll keine andere Verbindung hergestellt werden, ist das Trennen fakultativ.
Relationale Daten (mehrere Tabellen)
Als Tabelle Ausgeben