Jetzt kommen wir zu dem Punkt, auf den wir schon die ganze Zeit hingearbeitet haben: Die Verbindung von PHP und mySQL. In diesem Kapitel werden die Befehle beschrieben. Weiter unten werden noch Befehlsfolgen für gewisse Aufgaben aufgelistet.
Hier werden jetzt Befehle von PHP und mySQL verwendet. Zwischen diesen beiden Sprachen ist streng zu trennen!
int mysql_connect(string hostname , string username , string password);Mit mysql_connect() wird eine Verbindung zum Server geöffnet.
Wenn der zurückgegebene Wert positiv ist, verlief die Verbindung erfolgreich; bei Null gab es einen Fehler. Bei einem zweiten Aufruf mit denselben Parametern wird keine neue Verbindung erstellt, aber es wird der `link_identifier` zurückgegeben. Der ` link_identifier` wird benötigt, um bei mehreren Verbindungen eine eindeutig bestimmen zu können.
Als `hostname` ist in unserem Fall immer localhost zu nehmen. Für ` username` und `password` sind die von uns bzw. von Dir selbst zugewiesenen Werte zu nehmen.
Die Verbindung wird automatisch bei Beenden des Scripts geschlossen; sie kann aber auch mit mysql_close() explizit geschlossen werden.
int mysql_close(int link_identifier);mysql_close schließt eine bestehende Verbindung zum Server.
Es wird entweder `true` bei Erfolg oder `false` bei einem Fehler zurückgegeben.
Mit `link_identifier` kann explizit angegeben werden, welche Verbindung geschlossen werden soll. Wenn nichts angegeben wurde, wird die zuletzt geöffnete Verbindung geschlossen.
int mysql_select_db(string database_name , int link_identifier);Mit mysql_select_db wird die Datenbank ausgewählt, auf die sich die Anfragen beziehen soll.
Es wird entweder `true` bei Erfolg oder `false` bei einem Fehler zurückgegeben.
Wenn kein `link_identifier` angegeben wurde, wird die zuletzt geöffnete Verbindung zum Server genommen.
int mysql_query(string query , int link_identifier);mysql_query sendet die Befehlsfolge `query` an den Server mit der DB, die durch den `link_identifier` festgelegt ist. Wird kein `link_identifier` angegeben, wird die zuletzt geöffnete Verbindung genutzt.
Es wird ein sogenannter Zeiger auf das Ergebnis (result pointer) zurückgegeben. Wenn dieser (Result-)Zeiger den Wert 0 hat, gibt es einen Fehler. Mit dem Zeiger an sich kann man aber nicht viel anfangen; vielmehr benötig man ihn, um die folgenden Funktionen nutzen zu können. Dort wird er als Parameter result übergeben.
array mysql_fetch_array(int result [, int resulttype]);Dies ist eine erweiterte Version von `mysql_fetch_row` (siehe nächste Funktion). Die Indizes des Arrays werden nicht von 0 ausgehend durchgezählt, sondern nach den Spaltennamen benannt.
Die Funktion ist in der Ausführung nur unwesentlich langsamer als ` mysql_fetch_row`, obwohl es deutlich angenehmer zu programmieren ist.
Wenn beim Join zweier Tabellen zwei Spalten denselben Namen haben, müssen ihnen mit Hilfe der SELECT-Anweisung andere Namen gegeben werden. Beispiel:
SELECT t1.s1 AS foo, t2.s1 AS bar FROM t1, t2Die Spalte s1 der Tabelle t1 hat nun den Namen foo und s1 aus t2 hat den Namen bar.
Das optionale zweite Argument result_type in mysql_fetch_array ist eine Konstante und kann die folgenden Werte annehmen: MYSQL_ASSOC, MYSQL_NUM und MYSQL_BOTH.
<?php
mysql_connect($host,$user,$password);
mysql_select_db("database");
$result = mysql_query("SELECT user_id, fullname FROM users");
while($row = mysql_fetch_array($result)) {
echo $row["user_id"];
echo $row["fullname"];
}
?>
array mysql_fetch_row(int result);Holt eine Zeile aus der DB-Abfrage, gibt diese als Array zurück und setzt den Result-Zeiger auf die nächste Zeile. Für `result` muß der Rückgabewert (=Zeiger) der `mysql_query`-Funktion genommen werden.
Dasselbe Beispiel wie bei mysql_fetch_array:
<?php
mysql_connect($host,$user,$password);
mysql_select_db("database");
$result = mysql_query("SELECT user_id, fullname FROM users");
while($row = mysql_fetch_row($result)) {
echo $row[0];
echo $row[1];
}
?>
string mysql_error([int link_identifier]);Gibt die Fehlermeldung des letzten SQL-Befehls zurück. Wenn es keinen Fehler gab, wird nichts zurück gegeben. Wird kein `link_identifier` angegeben, wird die zuletzt geöffnete Verbindung genutzt.
int mysql_errno([int link_identifier]);Gibt die Fehlernummer des letzten SQL-Befehls zurück. Wenn es keinen Fehler gab, wird 0 zurückgegeben. Wird kein `link_identifier` angegeben, wird die zuletzt geöffnete Verbindung genutzt.
int mysql_insert_id(int link_identifier);Gibt die Nummer zurück, die beim letzten INSERT dem Feld mit AUTO_INCREMENT zugewiesen wurde.
int mysql_num_rows(int result);Gibt die Anzahl der Zeilen im Ergebnis zurück.
Wenn man zum Beispiel am mySQL-Prompt alle Mitarbeiter abfragen will, kommt folgende Ausgabe zu Stande:
mysql> select * from Mitarbeiter; +-----+------+-------+----------------+------------+--------------+ | MNr | VNr | AbtNr | Name | GebDat | Telefon | +-----+------+-------+----------------+------------+--------------+ | 1 | NULL | 3 | Christoph Reeg | 1979-05-13 | NULL | | 2 | 1 | 1 | junetz.de | 1998-03-05 | 069/764758 | | 3 | 1 | 1 | Uli | NULL | NULL | | 4 | 3 | 1 | JCP | NULL | 069/764758 | | 5 | 1 | 2 | Maier | NULL | 06196/671797 | | 6 | 5 | 2 | Meier | NULL | 069/97640232 | +-----+------+-------+----------------+------------+--------------+ 6 rows in set (0.00 sec) mysql>
Um das in einer HTML-Tabelle darzustellen, ist folgender (vereinfachter) HTML-Code notwendig:
<html>
<body>
<table>
<tr>
<th>MNr</th>
<th>VNr</th>
<th>AbtNr</th>
<th>Name</th>
<th>GebDat</th>
<th>Telefon</th>
</tr>
<tr>
<td>1</td>
<td></td>
<td>3</td>
<td>Christoph Reeg</td>
<td>1979-05-13</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>1</td>
<td>junetz.de</td>
<td>1998-03-05</td>
<td>069/764758</td>
</tr>
<tr>
<td>3</td>
<td>1</td>
<td>1</td>
<td>Uli</td>
<td></td>
<td></td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>1</td>
<td>JCP</td>
<td></td>
<td>069/764758</td>
</tr>
<tr>
<td>5</td>
<td>1</td>
<td>2</td>
<td>Maier</td>
<td></td>
<td>06196/671797</td>
</tr>
<tr>
<td>6</td>
<td>5</td>
<td>2</td>
<td>Meier</td>
<td></td>
<td>069/97640232</td>
</tr>
</table>
</body>
</html>
Als kleine Hilfe hier das Rahmenprogramm für die Funktion:
<?php
$db_host = "localhost";
$db_user = "cr";
$db_pass = "123";
$datab = "cr";
function print_result_table($result){
// hier das Richtige schreiben
}
// Hauptprogramm
/* Verbindung zur Datenbank aufbauen */
$db = @mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error());
@mysql_select_db($datab,$db) or die(mysql_error());
/* HTML-Startcode ausgeben */
echo "<html>\n<body>\n";
/* SQL-Abfrage */
$result = @mysql_query("SELECT * FROM Mitarbeiter");
print_result_table($result);
/* HTML-Endcode ausgeben */
echo "</body>\n</html>\n";
?>
Eine Lösung befindet sich in Anhang B.1.
Eine Lösung befindet sich in Anhang B.2.