|
In diesem Artikel werden wichtige PHP-Programmstrukturen für
den Zugriff auf eine MySQL-Datenbank an Hand von Beispielen erläutert.
Verbindungsparameter der MySQL-Datenbank festlegen
Die Verbindungsparameter sollten nicht mitten im Quelltext
Ihrer vielen verschiedenen PHP-Seiten codiert werden, sondern in einer
zentralen Konfigurationsdatei config.inc.php auf Variablen zugewiesen werden:
// Verbindungsparameter
$location = "db121.1und1.com";
$username = "HubertK";
$password = "geheim";
$database = "mydatabase";
Diese Steuerdatei kann in der PHP-Datei beispiel.php ganz einfach eingeschlossen werden:
// Konfigurationsdatei einschliessen:
require_once("include/config.inc.php");
// Jetzt mit dem Datenbankserver eine Verbindung aufbauen:
$conn = mysql_connect("$location","$username","$password");
// Wenn kein $conn-Handle gesetzt ist, konnte keine Verbindung hergestellt werden:
if (!$conn) die ("Could not connect MySQL");
// Bei erfolgter Verbindung die Datenbank auswählen:
mysql_select_db($database,$conn) or die ("Could not open database $database");
Die
hergestellte Verbindung gilt während der gesamten Skriptlaufzeit. Wird
das Skript beendet, wird auch automatisch die Verbindung abgebrochen.
Sobald die Verbindung im Skript hergestellt ist, können SQL-Befehle an
die Datenbank gesendet werden, wie in den folgenden Zugriffsbeispielen
gezeigt wird.
Neue Datensätze in bestehende Tabelle einfügen
Das Hinzufügen geschieht über den INSERT-Befehl von SQL:
$insert = "INSERT INTO tablename (feld1, feld2, feld3) VALUES ('wert1', 'wert2', 'wert3')";
mysql_query($insert) or die ("Could not add data to the table");
Die
Felder, die hinzugefügt werden (feld1, feld2, feld3) werden in runden
Klammern aufgeführt. Ihre Reihenfolge muss dabei nicht der Reihenfolge
der Felder in der Tabelle entsprechen. Nach dem Schlüsselwort VALUES
werden jetzt die zugehörigen Werte wiederum in runden Klammern
aufgelistet. Hierbei ist zu beachten, dass die Reihenfolge der Werte
(wert1, wert2, wert3) der voher angegebenen Feldreihenfolge entspricht!
Datensätze aus Tabelle abfragen
Datensätze werden mit dem SQL-Befehl SELECT abgefragt. Der
Wert '*' im folgenden Beispiel bedeutet, dass alle Felder des
Satzes ausgelesen werden sollen. Das spart viel Schreibarbeit und ist
ausserdem während der Entwicklung sinnvoll, wenn man die
Tabellenstruktur um weitere Felder erweitert. Im Beispiel werden alle
Felder sämtlicher Datensätze (Records) abgefragt, also ohne
Suchbedingung:
$query = "SELECT * FROM tablename";
$result = mysql_query($query);
$numrows = mysql_num_rows($result);
while($row = mysql_fetch_array($result))
{
echo "You have $numrows Link(s) in the database<br>n";
echo "Inhalt von Feld1: $row[feld1]<br>n";
echo "Inhalt von Feld2: $row[feld2]<br>n";
echo "Inhalt von Feld3: $row[feld3]<br><br>n";
}
Mit
dem PHP-Befehl mysql_num_rows kann die Anzahl der betroffenen
Datensätze abgefragt werden. Der Befehl mysql_fetch_array holt immer
einen kompletten Datensatzaus dem Antwort-Datenstrom des MySQL-Servers
ab. Um alle Records abzufragen wird deshalb eine While-Schleife solange
durchlaufen, bis der mysql_fetch_array den Wert FALSE liefert, also
keine Daten mehr hat.
Bestehende Datensätze updaten
Der Inhalt der Datensätze muss auch von PHP aus verändert werden,
z.B. wenn Anmeldedaten eines Benutzers über ein Formular abgefragt
werden. Um einen bestehenden Datensatz zu aktualisieren, wird der
SQL-Befehl UPDATE eingesetzt:
$query = "UPDATE tablename SET feld1='feld1', feld2='feld2' WHERE feld3='Inhalt-Feld-3'";
$result = mysql_query($query);
Es ist extrem wichtig, dass man
dem SQL-Server mit der WHERE-Bedingung eine Einschränkung auf einen
oder mehrere Datensätze mitgibt. Vergisst man die WHERE-Bedingung,
werden alle Datensätze aktualisiert!
Weitere Datenbankbefehle
Für den Zugriff werden folgende PHP-Befehle sinnvoll eingesetzt:
mysql_insert_id()
liefert die ID des zuletzt eingefügten, neuen Records zurück. Dieser
Befehl muss unmittelbar nach Ausführen des INSERT-Befehles abgesetzt
werden. Er kann nicht beim UPDATE-Statement verwendet werden.
Formatierung für DATETIME-Feld
Wenn in Formularen Datum- und Zeitabfragen vorgenommen werden, die
in einem datetime-Feld von MySQL gespeichert werden sollen, dann muss
von deutscher auf englische Darstellung umcodiert werden. Um z.B. einen
aktuellen Zeitstempel anzuspeichern kann folgender Befehl verwendet
werden:
$ActStamp = date("Y-m-d h:i:s");
-wird fortgesetzt-
|