7 - Universität Paderborn

Werbung
5
Vorlesung und Übung
Dr. Peter Pfahler
Institut für Informatik
Universität Paderborn
7
© Peter Pfahler, Michael Thies, Universität Paderborn
7. Datenbank-Zugriff
Zum Beispiel aus PHP-Skripten:
Client
© Peter Pfahler, Michael Thies, Universität Paderborn
7-2
Struktur einer Datenbank
© Peter Pfahler, Michael Thies, Universität Paderborn
7-3
Erzeugen von Datenbanken
Auf sksp.cs.upb.de durch den Administrator, z. B mit Web-Oberfläche:
© Peter Pfahler, Michael Thies, Universität Paderborn
7-4
Erzeugen von Datenbanken
oder durch SQL-Skripte:
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',...)
© Peter Pfahler, Michael Thies, Universität Paderborn
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!
© Peter Pfahler, Michael Thies, Universität Paderborn
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
© Peter Pfahler, Michael Thies, Universität Paderborn
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:
© Peter Pfahler, Michael Thies, Universität Paderborn
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.
© Peter Pfahler, Michael Thies, Universität Paderborn
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.
© Peter Pfahler, Michael Thies, Universität Paderborn
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.
© Peter Pfahler, Michael Thies, Universität Paderborn
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);
© Peter Pfahler, Michael Thies, Universität Paderborn
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";
}
?>
© Peter Pfahler, Michael Thies, Universität Paderborn
7-13
Herunterladen