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 mysql.cs.uni­paderborn.de durch den Administrator
© Peter Pfahler, Michael Thies, Universität Paderborn
7-4
Erzeugen von Tabellen
Z. B. 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("mysql.cs.uni­paderborn.de,
"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-Anfragen 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("mysql.cs.uni­paderborn.de", "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
7.2. Perl und MySQL am Beispiel
#!/usr/bin/perl
use DBI;
use CGI ":standard";
print header(), start_html(­title=>'Ergebnisse');
$db_handle = DBI­>connect("dbi:mysql:database=sks09_peter;" .
"host=mysql.cs.uni­paderborn.de;user=xxx;password=yyy")
or die "Couldn't connect to database: $DBI::errstr\n";
$sql = "SELECT * FROM noten";
$statement = $db_handle­>prepare($sql)
or die "Couldn't prepare query '$sql': $DBI::errstr\n";
$statement­>execute()
or die "Couldn't execute query '$sql': $DBI::errstr\n";
while ($row_ref = $statement­>fetchrow_hashref())
{
print "<b>$row_ref­>{vname} $row_ref­>{nname}</b> ",
" hat die Note <b>$row_ref­>{note}</b>.<br>";
}
$db_handle­>disconnect();
print end_html();
© Peter Pfahler, Michael Thies, Universität Paderborn
7-14
Herunterladen