MySQL, phpmyadmin & SQL Kurzübersicht
Referenzen MySQL Documentation: http://dev.mysql.com/doc PHP 5 / MySQL5. Studienausgabe. Praxisbuch und Referenz (Kannengießer & Kannengießer) 2
Datenbank anlegen SQL: CREATE DATABASE `<Datenbankname>` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; oder CREATE DATABASE `<Datenbankname>`; phpmyadmin: Startseite wählen (im Menü links phpmyadmin oder anklicken) Zeichensatz und Kollation (Sortierreihenfolge) auswählen Name angeben und Anlegen klicken 3
Nutzer einrichten SQL: CREATE USER '<username>'@'<host>' IDENTIFIED BY '<password>'; phpmyadmin: Startseite Rechte Neuen Benutzer hinzufügen Name, Host und PW angeben ggf. globale Rechte definieren OK nach Neuinstallation Passwort für root einrichten! SET PASSWORD FOR 'root'@'localhost' = PASSWORD( '<password>' ); Anschließend Passwort in phpmyadmin-konfiguration (<Installationsverzeichnis>\config.inc.php) ändern 4
Rechte vergeben Zwei Level globale Rechte (gelten für alle DBs), sollte nur root besitzen DB-spezifische Rechte SQL: GRANT <Recht1, Recht2, > ON `<DB-Name>`.* TO '<username>'@'<host>'; DB-spezifische Rechte oder GRANT <Recht1, Recht2, > ON *.* TO '<username>'@'<host>'; globale Rechte phpmyadmin: Startseite Rechte Rechte ändern ( ) Datenbankspezifische Rechte DB auswählen Rechte auswählen und OK 5
Tabellen anlegen SQL: CREATE TABLE <name> (<Felddefinitionen>) ENGINE=<Typ> z.b. CREATE TABLE `geo406db`.`user` ( `id` INT NOT NULL AUTO_INCREMENT, `vorname` VARCHAR(40) NOT NULL, `nachname` VARCHAR(40) NOT NULL, `email` VARCHAR(20) NOT NULL, `passwort` VARCHAR(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE = MYISAM phpmyadmin: Datenbank wählen, dann unter Neue Tabelle Tabellenname und Feldanzahl angeben Feldnamen, Typen, Einstellungen, Primärschlüssel und Indizes definieren Speichern 6
MySQL: Datentypen Numerische Typen BOOLEAN TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT FLOAT, DOUBLE, DECIMAL Datum und Zeit DATE, YEAR DATETIME TIME, TIMESTAMP Strings: CHAR, VARCHAR TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT Aufzählungen ENUM, SET 7
Datenbank-Indizes Index: von DB verwaltete Datenstruktur zur schnellen Suche nach Werten auf Tabellenattributen Vorteil: kurze Antwortzeiten bei Suchen auf indizierten Attributen geringe Anfragelast Nachteil: erhöhter Aufwand beim schreibenden Zugriff Einrichtung: ALTER TABLE `<tablename>` ADD INDEX `<indexname>` (`attributename`) Entfernen: ALTER TABLE `<tablename>` DROP INDEX `<indexname>` 8
Daten löschen Datenbanken: DROP DATABASE `<database>`; Nutzer: DROP USER '<username>'@'<host>'; Tabellen: DROP TABLE `<name>`; 9
Beispieldatenbank 3 Tabellen: Person Kneipe Favorit 10
MySQL-Zugriff mit PHP DB-Serververbindung herstellen $link = mysql_connect("localhost", "geo406user", "geheim"); if (!$link) { } die("keine Verbindung möglich: ". mysql_error()); Datenbank auswählen mysql_select_db("geo406db", $link); Query abschicken $result = mysql_query("select vorname, nachname FROM person ORDER BY nachname", $link); optional! if (!$result) { exit("ungültige Abfrage: ". mysql_error()); } Verbindung beenden mysql_close($link); optional! mysql_connect.php mysql_select.php 11
MySQL-Zugriff mit PHP (2) Ergebnisse auswerten Ergebnislänge abfragen $num_rows = mysql_num_rows($result); echo "Ergebnis umfasst $num_rows Datensätze:<br>"; auf Werte zugreifen $row = mysql_fetch_array($result); //..per Index.. echo $row[0]." ".$row[1]."<br>"; //..oder per Attributname echo $row['vorname']." ".$row['nachname']."<br>"; über alle Ergebnisse iterieren while ($row = mysql_fetch_array($result)) { } echo $row['vorname']." ".$row['nachname']."<br>"; mysql_select.php 12
Aufgabe Schreiben Sie ein PHP-Skript, welches alle Personen mit Vornamen und Nachnamen als Link- Liste anzeigen kann und person_overview.php bei Auswahl eines Links alle Detailinformationen zu dieser Person darstellt. person_detail.php Erweitern Sie das Skript, so dass in der Detailansicht einer Person auch alle ihre favorisierten Kneipen angezeigt werden. 13
MySQL-Zugriff mit PHP (3) Daten in DB einfügen $vorname = "Rainer"; $nachname = "Hoffmann"; $email = "c5raho@uni-jena.de"; $login = "c5raho"; $passwort = "geheim"; mysql_insert.php $result = mysql_query( "INSERT INTO person (vorname, nachname, email, login, passwort) VALUES ('".$vorname."','".$nachname."','".$email."','".$login."','".$passwort."')" ); statische Schreibweise: $result = mysql_query( "INSERT INTO person (vorname, nachname, email, login, passwort) VALUES ('Rainer','Hoffmann','c5raho@uni-jena.de','c5raho','geheim')" ); 14
Aufgabe Schreiben Sie ein PHP-Skript, mit dem über ein Formular Daten in die Datenbanktabelle person eingefügt werden können. Verlinken Sie dieses Skript auf der Übersichtsseite. person_insert.php 15
Aufgabe Schreiben Sie ein PHP-Skript, welches zum Löschen von Personen eingesetzt werden kann. Dazu soll die entsprechende Personen-ID per URL an das Skript übergeben werden. Der Aufruf des Skriptes soll über einen Hypertext-Link auf der Detailansichtsseite erfolgen. person_delete.php 16