Begleitskript zum PHP/MySQL Kurs http://www.online-platform.net Dieser Text unterliegt der GNU General Public License. Er darf als ganzes oder in Auszügen kopiert werden, vorausgesetzt, dass sich dieser Copyright Vermerk auf jeder Kopie befindet.
PHP/MySQL Seite 2 Inhaltsverzeichnis 1 MySQL 3 1.1 Datenbanken.................................. 3 1.1.1 Verbindung zum Datenbankserver................... 3 1.1.2 Datenbank anlegen........................... 4 1.1.3 Datenbanken anzeigen......................... 5 1.1.4 Datenbank verwenden und wechseln.................. 5 1.1.5 Datenbank löschen........................... 6 1.2 Tabellen.................................... 6 1.2.1 Tabellen anlegen............................ 6 1.2.2 Tabellen anzeigen........................... 7 1.2.2.1 Felddatentypen....................... 7 1.2.2.2 Primärschlüssel....................... 9 1.2.2.3 Auto Increment....................... 9 1.2.3 Tabellen bearbeiten.......................... 10 1.2.3.1 Tabellen umbenennen.................... 10 1.2.3.2 Spalten löschen....................... 10 1.2.3.3 Spalten hinzufügen..................... 10 1.2.3.4 Felddatentyp ändern..................... 11 1.2.4 Tabellen löschen............................ 11 1.3 Datensätze................................... 11 1.3.1 Datensätze hinzufügen......................... 11 1.3.2 Abfragen................................ 12 1.3.2.1 Datensätze sortieren..................... 12 1.3.3 Datensätze löschen.......................... 13 1.3.4 Datensätze aktualisieren........................ 13 2 PHP 15 2.1 Erstellen einer Verbindung zum Datenbankserver............... 15 2.2 Auswahl der Datenbank............................ 15 2.3 Verbindung zur Datenbank schließen..................... 16 2.4 Anfragen an den Datenbankserver....................... 16 2.5 Daten hinzufügen............................... 17 2.6 Daten ausgeben................................ 18 2.6.1 mysql_num_rows........................... 19 2.6.2 mysql_fetch_object.......................... 19 2.6.3 mysql_fetch_array.......................... 20 2.6.4 mysql_field_name........................... 20
PHP/MySQL Seite 3 1 MySQL MySQL ist ein relationales Datenbanksystem (RDBMS) mit einer Client/Server Struktur. Auf dem Datenbankserver können beliebig viele Datenbanken implementiert sein, ebenso können beliebig viele Clients gleichzeitig auf den Server zugreifen. Grenzen setzt hier nur die eingesetzte Hardware. 1.1 Datenbanken Zusammengehörige Daten werden in einer Datenbank gespeichert. 1.1.1 Verbindung zum Datenbankserver Um eine Verbindung zum Datenbankserver aufzubauen werden ein Benutzername und dazugehöriges Kennwort sowie der Name oder die IP-Adresse des Servers benötigt. MySQL besitzt keine grafische Benutzeroberfläche. Die Bedienung erfolgt unter Windows über die DOS Eingabeaufforderung, unter Linux über eine Shell. mysql -hhostname -ubenutzername -ppasswort mysql -hwin2k-file -uroot -p
PHP/MySQL Seite 4 Nach dieser Eingabe wird das Passwort verlangt. Der Benutzer root ist der Standardbenutzer eines MySQL Datenbanksystems und verfügt über Administratorrechte, das Passwort ist standardmäßig leer. Nach erfolgreicher Anmeldung meldet sich MySQL mit dem folgenden MySQL Prompt: Auf einem Standalone Rechner ist diese ausführliche Anmeldung nicht zwingend notwendig, hier reicht die Eingabe mysql aus, um sich am Server anzumelden. Um sich am Datenbankserver wieder abzumelden wird der Befehl exit verwendet. Anmerkung: MySQL Befehle werden immer mit einem Semikolon abgeschlossen. Es gibt zwar einige Ausnahmen, bei denen das Semikolon auch weggelassen werden kann, aber am einfachsten ist es, es immer einzugeben. 1.1.2 Datenbank anlegen Eine Datenbank wird mit dem Befehl create database angelegt. CREATE DATABASE Datenbankname
PHP/MySQL Seite 5 create database guestbook; Das erfolgreiche Anlegen wird mit der folgenden Meldung bestätigt: 1.1.3 Datenbanken anzeigen Welche Datenbanken auf dem Server vorhanden sind kann man sich mit dem Befehl show databases anzeigen lassen. show databases; Das Ergebnis könnte ungefähr so aussehen: 1.1.4 Datenbank verwenden und wechseln Bevor auf eine Datenbank zugegriffen werden kann, muss diese mit dem Befehl use aktiviert werden. USE Datenbankname
PHP/MySQL Seite 6 use guestbook; Der Erfolg wird mit der folgenden Meldung bestätigt: 1.1.5 Datenbank löschen Datenbanken werden mit dem Befehl drop database gelöscht. DROP DATABASE Datenbankname drop database guestbook; 1.2 Tabellen Die Daten einer Datenbank werden in Tabellen gespeichert. 1.2.1 Tabellen anlegen Eine Tabelle wird mit dem Befehl create table angelegt. Dann erfolgt die in Klammern die Angabe des Feldnamens und des Felddatentyps. Die einzelnen Felder werden durch Kommata getrennt. Wenn man eine Tabelle anlegt, sollte man genau wissen, welche Daten gespeichert werden sollen und welche Felddatentypen für die entsprechenden Daten gewählt werden sollen (Text, Zahlen, Datum,...). CREATE TABLE Tabellenname (Feld1 Datentyp, Feld2 Datentyp,...) create table adressen( id int, vorname varchar(50), name varchar(50), ort varchar(50));
PHP/MySQL Seite 7 Das erfolgreiche Anlegen einer Tabelle wird mit einer Erfolgsmeldung bestätigt. 1.2.2 Tabellen anzeigen Welche Tabellen in einer Datenbank vorhanden sind kann man sich mit dem Befehl show tables anzeigen lassen. show tables; Das Ergebnis könnte so aussehen: Anmerkung: Zuvor muss mit dem Befehl use eine Datenbank ausgewählt worden sein. 1.2.2.1 Felddatentypen MySQL stellt eine Vielzahl von Felddatentypen zur Verfügung. Die folgende Darstellung gibt einen Überblick.
PHP/MySQL Seite 8 Abbildung 1.1: MySQL Felddatentypen
PHP/MySQL Seite 9 Im Folgenden sollen nur die wichtigsten Felddatentypen kurz vorgestellt werden. Datentyp Definition Varchar Text, max. 255 Zeichen Text Text, max. <216 Zeichen Int Zahl, von -2147483648 bis +2147483648 Date Datum, Format YYYY-MM-DD Time Zeit, Format HH:MM:SS Timestamp Datum und Zeit, Format YYYYMMDDHHMMSS, wird bei Einfüge- und Aktualisierungsvorgängen automatisch eingetragen. Von mehreren Timestampfeldern wird immer nur das erste aktualisiert. 1.2.2.2 Primärschlüssel Damit ein Datensatz eindeutig wird, muss ein Feld mit einem Primärschlüssel werden. Dies erfolgt durch den Zusatz primary key (Feldname) beim Erstellen einer Tabelle. create table adressen( id int, vorname varchar(50), name varchar(50), ort varchar(50), primary key(id)); In diesem wird das Feld id als Primärschlüssel definiert. 1.2.2.3 Auto Increment Da ein Wert im Primärschlüssel nur einmal vorkommen darf, empfiehlt es sich diesen Wert von MySQL automatisch vergeben zu lassen. Dies geschieht durch den Zusatz auto_increment bei dem Feld, das Primärschlüssel werden soll. create table adressen( id int not null auto_increment, vorname varchar(50), name varchar(50), ort varchar(50), primary key(id));
PHP/MySQL Seite 10 Damit das Primärschlüsselfeld immer einen Wert bekommt, sollte man dieses auch noch so definieren, dass es nicht leer bleiben darf. Dies geschieht durch den Zusatz not null. 1.2.3 Tabellen bearbeiten Vorhandene Tabellen können jederzeit geändert werden wie z.b. löschen oder hinzufügen von Spalten oder Änderung des Felddatentyps. Dazu wird der Befehl alter table verwendet. 1.2.3.1 Tabellen umbenennen ALTER TABLE Tabellenname RENAME neuer_tabellenname alter table adressen rename anschriften; Diese benennt die Tabelle adressen in anschriften um. 1.2.3.2 Spalten löschen ALTER TABLE Tabellenname DROP Spaltenname alter table adressen drop ort; In diesem wird die Spalte ort aus der Tabelle adressen gelöscht. 1.2.3.3 Spalten hinzufügen ALTER TABLE Tabellenname ADD Erstellungsanweisung,... alter table adressen add plz int; Dieses fügt der Tabelle adressen das Feld plz vom Datentyp int hinzu.
PHP/MySQL Seite 11 1.2.3.4 Felddatentyp ändern ALTER TABLE Tabellenname CHANGE Spaltenname Erstellungsanweisung alter table adressen change name varchar (100); In diesem wird der Datentyp des Feldes name in varchar geändert. 1.2.4 Tabellen löschen Tabellen werden mit dem Befehl drop table gelöscht. DROP TABLE Tabellenname drop table adressen; 1.3 Datensätze Ein Datensatz enthält immer einen Satz von zusammengehörigen Informationen. Er entspricht einer Zeile in einer Tabelle. 1.3.1 Datensätze hinzufügen Datensätze werden mit dem Befehl insert into in eine Tabelle eingetragen. INSERT INTO Tabellenname (Spaltenname,...) VALUES (Wert,...) insert into adressen (vorname, name, ort) values ( Hans, Meier, Hagen );
PHP/MySQL Seite 12 Dieses fügt einen Datensatz in die Tabelle adressen ein. Wenn mehrere Datensätze eingetragen werden sollen, sieht das wie folgt aus: insert into adressen (vorname, name, ort) values ( Hans, Meier, Hagen ) ( Paul, Müller, Hagen ); 1.3.2 Abfragen Die Inhalte von Tabellen können mit dem Befehl select angezeigt werden. SELECT Spaltenname,... FROM Tabellenname WHERE Auswahlbedingung select * from adressen; Dieses zeigt alle Datensätze der Tabelle adressen an. Das Sternchen hat hier die Funktion eines Platzhalters. select name, ort from adressen where id=1; Bei diesem werden nur die Spalten name und ort des ersten Datensatzes angezeigt. 1.3.2.1 Datensätze sortieren Neue Datensätze werden immer am Ende einer Tabelle eingefügt. Wenn Datensätze gelöscht werden, werden diese entstandenen Lücken erst durch neue Datensätze gefüllt. Das bedeutet, dass die Daten in der Tabelle unsortiert vorliegen. Die Sortierung erfolgt indem man den
PHP/MySQL Seite 13 select Befehl um den Zusatz order by erweitert. Die Sortierung ist immer aufsteigend, wenn absteigend sortiert werden soll, erweitert man den Befehl um den Zusatz desc. select * from adressen order by name desc; Dieses gibt die Inhalte sortiert nach dem Namen in absteigender Reihenfolge aus. 1.3.3 Datensätze löschen Datensätze löscht man mit dem Befehl delete. DELETE FROM Tabellenname WHERE Auswahlbedingung Welche Datensätze aus einer Tabelle gelöscht werden ergibt sich aus der Auswahlbedingung. delete from adressen; Dieses würde alle Datensätze der Tabelle adressen löschen, da keine Auswahlbedingung angegeben wurde. delete from adressen where name= Meier ; Dieses löscht alle Datensätze bei denen im Feld name der Wert Meier steht. 1.3.4 Datensätze aktualisieren Datensätze werden mit dem Befehl update aktualisiert. UPDATE Tabellenname SET Spaltenname=Ausdruck,... WHERE Auswahlbedingung update adressen set ort= Köln where name= Meier ;
PHP/MySQL Seite 14 Dieses ändert bei allen Datensätzen, bei denen der Name Meier lautet, den Ort in Köln.
PHP/MySQL Seite 15 2 PHP PHP stellt eine Reihe von Befehlen zur Zusammenarbeit mit MySQL Datenbanken zur Verfügung. 2.1 Erstellen einer Verbindung zum Datenbankserver Wie bereits oben erwähnt wird zum Herstellen der Verbindung der Name des Datenbankservers, der Benutzername und ein Kennwort benötigt. von PHP aus wird die Verbindung mit dem Befehl mysql_connect hergestellt. mysql_connect (host, user, passwort) $host="127.0.0.1"; $user="root"; $passwort=""; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); Falls die Verbindung nicht hergestellt werden kann, sollte das Script an dieser Stelle sofort abgebrochen werden. Die in dem verwendeten Angaben zu Host, User und Passwort gelten für einen Standalone Rechner. 2.2 Auswahl der Datenbank Nachdem die Verbindung zum Server hergestellt wurde, muss eine Datenbank ausgewählt werden. Dies geschieht über den Befehl mysql_select_db. mysql_select_db (Datenbankname)
PHP/MySQL Seite 16 $host="127.0.0.1"; $user="root"; $passwort=""; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); $db_name = "guestbook"; mysql_select_db ($db_name); 2.3 Verbindung zur Datenbank schließen Wenn die Verbindung zur Datenbank nicht mehr benötigt wird, sollte diese geschlossen werden. Dazu wird der Befehl mysql_close verwendet. mysql_close () $host="127.0.0.1"; $user="root"; $passwort=""; $db_name = "guestbook"; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); mysql_select_db ($db_name); echo "Verbindung hergestellt.<br>" ; mysql_close(); echo "Verbindung geschlossen."; 2.4 Anfragen an den Datenbankserver Um Anfragen jeglicher Art an den Datenbankserver richten zu können, wird der Befehl mysql_query verwendet. über diese Funktion wird ein SQL Befehl an den Server gesendet. Dieser SQL Befehl kann sowohl eine Aktualisierungsanfrage an die Tabelle als auch eine Auswahloder Einfügeanfrage sein. mysql_query (Anfrage)
PHP/MySQL Seite 17 $host="127.0.0.1"; $user="root"; $passwort=""; $db_name = "guestbook"; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); mysql_select_db ($db_name); echo "Verbindung hergestellt.<br>" ; $sql = "select * from adressen"; mysql_query ($sql); Dieser Befehl sendet nur die Anfrage, es werden damit noch keine Daten aus der Datenbank ausgegeben. 2.5 Daten hinzufügen Um Daten in eine Datenbanktabelle einzufügen verwendet man den SQL Befehl insert into. Dieser Befehl wird, wie bei jeder Anfrage, mit der Funktion mysql_query an den Datenbankserver gesendet. $host="127.0.0.1"; $user="root"; $passwort=""; $db_name = "guestbook" ; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); mysql_select_db ($db_name); echo "Verbindung hergestellt.<br>"; $sql_entry = "insert into adressen (vorname, name, ort) values( Fritz, Müller, Köln )"; $entry = mysql_query ($sql_entry); echo "Die Daten wurden eingetragen.<br>"; mysql_close(); echo "Verbindung geschlossen."; Dieses würde immer eine Erfolgsmeldung ausgeben, auch wenn das Eintragen fehlgeschlagen ist. Die folgende Codeänderung berücksichtigt auch diesen Fall. if ($entry) echo "Die Daten wurden eingetragen.<br>"; else echo "Eintragung fehlgeschlagen.<br>";
PHP/MySQL Seite 18 Im obigen werden die Daten noch fest vorgegeben. Im Normalfall werden die Daten aus einem Formular kommen. Das Formular könnte ungefähr so aussehen. <form action="db_form_auswertung.php" method="post"><br><br> Nachname<input type="text" name="nachname" size="50"><br><br> Vorname<input type="text" name="vorname" size="50" ><br><br> Ort<input type="text" name="ort" size="50" ><br><br> <input type="submit" name="senden" value="senden"><br><br> </form> In diesem Formular werden drei Werte an die Datei db_form_auswertung.php übergeben. Um diese Daten in die Datenbank einzutragen, muss folgende Codeänderung vorgenommen werden. $host="127.0.0.1"; $user="root"; $passwort=""; $db_name = "guestbook"; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); mysql_select_db ($db_name); echo "Verbindung hergestellt.<br>"; $sql_entry = "insert into adressen (vorname, name, ort) values( $_POST[vorname], $_POST[name], $_POST[ort] ); $entry = mysql_query ($sql_entry); if ($entry) echo "Die Daten wurden eingetragen.<br>"; else echo "Eintragung fehlgeschlagen.<br>"; mysql_close(); echo "Verbindung geschlossen."; Natürlich sollten alle Felder vor dem Eintragen auf ihre Richtigkeit hin überprüft werden. 2.6 Daten ausgeben Um die Ergebnisse einer Anfrage auf dem Bildschirm auszugeben, stellt PHP eine Reihe von Befehlen zur Verfügung.
PHP/MySQL Seite 19 2.6.1 mysql_num_rows Mit der Funktion mysql_num_rows kann die Anzahl der Datensätze einer Abfrage ermittelt werden. mysql_num_rows (result_id) $host="127.0.0.1"; $user="root"; $passwort=""; $db_name = "guestbook"; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); mysql_select_db ($db_name); echo "Verbindung hergestellt.<br>"; $sql = "select * from adressen"; $result = mysql_query ($sql); echo " Die Abfrage enthält ".mysql_num_rows($result)." Datensätze."; mysql_close(); echo "Verbindung geschlossen."; 2.6.2 mysql_fetch_object Mit der Funktion mysql_fetch_object kann ein einzelner Datensatz aus einem Abfrageergebnis ausgelesen und weiterverarbeitet oder am Bildschirm ausgegeben werden. mysql_fetch_object (result_id) $host="127.0.0.1"; $user="root"; $passwort=""; $db_name = "guestbook"; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); mysql_select_db ($db_name); echo "Verbindung hergestellt.<br>"; $sql = "select * from adressen"; $result = mysql_query ($sql);
PHP/MySQL Seite 20 while ($row = mysql_fetch_object($result)) { echo $row->vorname," ", $row->name," ",$row->ort," ",$row->plz; } mysql_close(); echo "Verbindung geschlossen."; 2.6.3 mysql_fetch_array Die Funktion mysql_fetch_array legt einen Datensatz aus einem Abfrageergebnis in einem Array ab. Die einzelnen Daten werden über ihren Feldnamen angesprochen. mysql_fetch_array (result_id) $host="127.0.0.1"; $user="root"; $passwort=""; $db_name = "guestbook"; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); mysql_select_db ($db_name); echo "Verbindung hergestellt.<br>"; $sql = "select * from adressen"; $result = mysql_query ($sql); while ($row = mysql_fetch_array($result)) { echo $row["vorname"]," ",$row["name"]," ",$row["ort"]," ",$row["plz"]; } mysql_close(); echo "Verbindung geschlossen."; 2.6.4 mysql_field_name Mit der Funktion mysql_field_name kann man die Feldnamen einer Tabelle auslesen. mysql_field_name (result_id, field_number)
PHP/MySQL Seite 21 $host="127.0.0.1"; $user="root"; $passwort=""; $db_name = "guestbook" ; mysql_connect($host, $user, $passwort) or die ("Verbindung zur Datenbank nicht möglich"); mysql_select_db ($db_name); echo "Verbindung hergestellt.<br>"; $sql = "select * from adressen"; $result = mysql_query ($sql); $num_rows = mysql_num_rows($result); $count = 0; while ($count < $num_rows) { echo mysql_field_name($result,$count)."<br>"; $count++; } mysql_close(); echo "Verbindung geschlossen."; Um die Spaltennamen ausgeben zu können muss zuvor die Anzahl der Spalten in der Tabelle ermittelt werden. Dies geschieht mit der Funktion mysql_num_rows. Die ermittelte Zahl wird gleichzeitig zur Abbruchbedingung der while-schleife, mit der die Spaltennamen ausgelesen werden. Die Funktion mysql_field_name bekommt als zusätzlichen Parameter die Nummer der Spalte, deren Name ausgegeben werden soll. Anmerkung: MySQL beginnt beim Zählen der Spalten immer bei 0.