5 Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn 7 7. Datenbank-Zugriff Zum Beispiel aus PHP-Skripten: Client 7-2
Struktur einer Datenbank 7-3 Erzeugen von Datenbanken Auf sksp.cs.upb.de durch den Administrator, z. B mit Web-Oberfläche: 7-4
oder durch SQL-Skripte: Erzeugen von Datenbanken Anlegen einer Tabelle: CREATE TABLE dozent ( Id INT NOT NULL AUTO_INCREMENT, Vorname VARCHAR(36) NOT NULL, Nachname VARCHAR(36) NOT NULL, Titel VARCHAR(12), PRIMARY KEY (Id) ); Andere Spaltentypen: Ganze Zahlen TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT Gleitpunktzahlen FLOAT, DOUBLE Dezimalzahlen DECIMAL(M,D) Strings CHAR(M), VARCHAR(M), TEXT Datum, Zeit DATE, TIME, DATETIME, TIMESTAMP, YEAR,... Aufzählungen ENUM('value1','value2',...) Mengen SET('value1','value2',...) 7-5 Einfügen, Ändern und Löschen von Datensätzen Einfügen durch explizites Angeben der Spalten: INSERT INTO dozent (Vorname, Nachname) VALUES('Erika', 'Mustermann'); Einfügen von vollständigen Datensätzen: INSERT INTO dozent VALUES(NULL, 'Erika', 'Mustermann', 'Prof. Dr.'); Ändern von Datensätzen: UPDATE dozent SET Titel='Prof. Dr.' WHERE Id=5; UPDATE dozent SET Nachname='Meier' WHERE Nachname='Meyer'; Löschen von Datensätzen: DELETE FROM dozent WHERE Vorname='Erika'; Ohne WHERE-Klausel werden alle Datensätze gelöscht! 7-6
Zugriff auf Datensätze Allgemeine Form: SELECT Spalten FROM Tabellen WHERE Bedingungen Alles auswählen: SELECT * FROM dozent; Bestimmte Spalten auswählen: SELECT Titel, Nachname FROM dozent; Bestimmte Zeilen auswählen: SELECT * FROM dozent WHERE LEFT(Nachname, 1) = 'M'; liefert: 7-7 Sortierung SELECT Vorname, Nachname, GebTag FROM friends ORDER BY GebTag; Nach mehreren Werten SELECT * FROM dozent ORDER BY Nachname, Vorname; Nach berechneten Werten: SELECT name, birth, death, (YEAR(death) - YEAR(birth)) - (DAYOFYEAR(death) < DAYOFYEAR(birth)) AS age FROM pet WHERE death IS NOT NULL ORDER BY age; liefert: 7-8
7.1. PHP und MySQL Aufbau der Verbindung zum Datenbank-Server <?php $link = mysql_pconnect("host[:port]", "user", "passw");?> Beispiel function connect_to_dbserver() { $link = mysql_pconnect("localhost", "otto", "geheim"); if (! $link) { echo "Keine Verbindung zum MySQL-Server!"; exit; mysql_pconnect() (mit p vor dem connect) erzeugt persistente Verbindungen, die der Web-Server mehrfach verwenden kann und automatisch schliesst. Sie können nicht per mysql_close() im Skript geschlossen werden. 7-9 PHP und MySQL Auswahl einer Datenbank <?php $res = mysql_select_db($dbname, $link); if (! $res) { echo "Kein Zugriff auf $dbname"; exit; alternativ mit boolescher Kurzauswertung: mysql_select_db($dbname, $link) or die("kein Zugriff auf $dbname"); Die Angabe der Datenbankverbindung $link ist optional. Standardmäßig wird die zuletzt geöffnete Verbindung verwendet. 7-10
PHP und MySQL Queries $query = "irgendeine SQL-Anfrage"; $result = mysql_query($query, $link); Beispiel function teachername($index) { $query = "SELECT * FROM dozent WHERE Id='$index'"; $result = mysql_query($query); if(! $result) { echo "Error in SQL statement!"; exit; mysql_free_result($result); SELECT-Abfragen liefern Tabellen zurück, mit mysql_free_result() werden diese Tabellen am Ende freigegeben. 7-11 PHP und MySQL Zugriff auf Anfrage-Ergebnisse Anzahl der Ergebniszeilen $num = mysql_num_rows($result); Anzahl der Ergebnisspalten $num = mysql_num_fields($result); Name einer Ergebnisspalte $name = mysql_field_name($result, $index); Eine Zeile als indiziertes Array (Iterator) $row = mysql_fetch_row($result); Eine Zeile als assoziatives Array (Iterator) $row = mysql_fetch_array($result); 7-12
PHP und MySQL: Vollständiges Beispiel <?php $db=mysql_pconnect("localhost", "peter", "geheim"); if (!$db) { echo ("Verbindung zur Zeit nicht moeglich"); exit(); if (!mysql_select_db("petertest")) { echo ("Verbindung zu petertest nicht moeglich"); exit(); $result = mysql_query("select * from tier"); while ($row = mysql_fetch_array($result)){ echo $row["id"]. "\t". $row["name"]. "\t". $row["preis"]. "<br>\n";?> 7-13