MySQL Voraussetzung und Installation einer MySQL Datenbank MySQL ist genau wie PHP plattformunabhängig. D.h. Sie können MySQL unter einer gängigen Windows-Version wie z.B. WindowsMe oder unter Linux oder UnixBetriebssystemen installieren. Die Installation unterscheidet sich aber von der Installation unter Windows. Sonst werden keine Vorraussetzungen für MySQL benötigt. Die neueste Version von MySQL können Sie aus dem Internet unter http://www.mysql.com/ herunterladen. Um MySQL zu starten, führen Sie das Setup-Programm (SETUP.EXE) aus und installieren MySQL in ein beliebiges Verzeichnis. Im Beispiel wurde die MySQLInstallation in das Verzeichnis C:\Web\MySQL installiert. Nachdem die Installation abgeschlossen ist, öffnen Sie mit einem Texteditor (WordPad) die Datei My-Example.cnf in Ihrem MySQL-Verzeichnis und entfernen das Kommentarzeichen # in der Zeile mit der Anweisung basedir. In der Beispielinstallation ist die Datei unter C:\Web\MySQL\My-Example.cnf zu finden. Tragen Sie als Verzeichnis hier Ihr MySQL-Verzeichnis ein (z.B. C:\Web\MySQL). Speichern Sie die Datei als C:\My.cnf. Sie können den Start von MySQL unter WindowsME mit Hilfe des Registry-Editors automatisieren. Fügen Sie dazu unter HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ RunServices eine Zeichenkette mit dem Namen mysqld-max und dem Pfad der Datei MySQLD-Max.exe ein. In der Beispielinstallation war das C:\Web\MySQL\Bin\MySQLD-Max.exe. Testen von MySQL Nach dem nächsten Neustart können Sie testen, ob der Eintrag zu dem gewünschten Erfolg geführt hat. Wechseln Sie dazu in der Eingabeaufforderung in das MySQL-Verzeichnis, dann in das Unterverzeichnis bin und geben den Befehl mysqladmin ping ein. Z.B. c:\Web\mysql\bin\mysqladmin ping. MySQL-Monitor Um eine MySQL-Datenbank abzufragen, zu aktulaisieren oder zu erstellen, benutzen Sie das Kommandozeilen-Programm mysql.exe unter Windows. Korrekt heißt dieses Programm MySQL-Monitor. (Abb.8: MySQL-Monitor) Starten Sie MySQL-Monitor ohne weitere Parameter, versucht es zur lokalen MySQLDatenbank (localhost) ohne spezifizierten Benutzer und ohne Passwort zu verbinden. Das funktioniert nur, wenn der Zugriff ohne Passwort erlaubt ist, was aber nach der Installation ohne weiteres Eingreifen der Fall ist. Mit Hilfe des MySQL-Monitors ist es möglich, eine Verbindung zu jeder beliebigen MySQLDatenbank auf der Welt aufzubauen. Sie benötigen lediglich die entsprechenden Rechte und Kennwörter. (Abb.9: Information zu MySQL-Monitor) In die Eingabezeile des MySQL-Monmitors geben Sie verschiedene Steuerkommandos ein, die mit „\“ beginnen, oder beliebige 4SQL-Kommandos, die MySQL unterstützt. MySQL-Kommando Funktion show database; Gibt alle erzeugten Datenbanken zurück. Es sollte mindestens die Datenbank mysql angezeigt werden. use test; Verwendet die Datenbank mit dem Namen test. Alle weiteren SQL-Kommandos beziehen sich dann auf diese Datenbank. show tables; Zeigt alle erzeugten Tabellen der aktuell gewählten Datenbank an. quit oder exit Beendet MySQL-Monitor. Das Kommandozeilen-Programm unterstützt zahlreiche Parameter, die Sie erhalten, wenn Sie mysql –-help eintippen. phpMyAdmin Bei Webspace-Angeboten mit MySQL richten die Hosts die Datenbank fast immer so ein, dass ein Zugriff nur von einer oder wenigen IP-Adressen möglich ist. Zu diesen Adressen gehört normalerweise immer die des Webservers, aber nur selten der heimische PC. Es bleibt daher nur die Möglichkeit, ein Programm auf dem Webserver zu installieren, das Vermittler ist und gleichzeitig die Oberfläche zur Datenbank herstellt. Um eine Datenbank sowie deren Tabellen komfortabel und einfach zu verwalten, gibt es von PHP ein Programm, nämlich phpMyAdmin. PhpMyAdmin ist ein Set an PHP-Skripts, die eine Menü- und Formulargesteuerte Verwaltung einer MySQL-Datenbank über das Internet ermöglichen. Damit phpMyAdmin richtig funktioniert, ist es erforderlich, dass der Webserver Dateien mit der Erweiterung .PHP3 an die PHP-Engine weiterleitet, falls Sie keine spezielle Version von PhpMyAdmin für PHP4 besitzen. Sie können PHPMyAdmin im Internet unter der Adresse http://phpmyadmin.sourceforge.net/ herunterladen. Installieren Sie phpMyAdmin in das Dokumenten-Verzeichnis des Webservers, so dass das Verzeichnis phpmyadmin entsteht. Z.B. c:\Web\apache\htdocs\phpmyadmin. Öffnen Sie die Datei confic.inc.php3 im Verzeichnis phpmyadmin mit einem Texteditor, zum Beispiel WordPad. Stellen Sie wie in der unteren Abbildung die korrekten Werte ein. // The $cfgServers array starts with $cfgServers[1]. Do not use $cfgServers[0]. // You can disable a server config entry by setting host to ''. $cfgServers[1]['host'] = 'localhost'; // MySQL hostname $cfgServers[1]['port'] = ''; // MySQL port - leave blank for default port $cfgServers[1]['adv_auth'] = false; // Use advanced authentication? $cfgServers[1]['stduser'] = ''; // MySQL standard user (only needed with advanced auth) $cfgServers[1]['stdpass'] = ''; // MySQL standard password (only needed with advanced auth) $cfgServers[1]['user'] = 'root'; $cfgServers[1]['password'] = ''; auth) $cfgServers[1]['only_db'] = 'Verwaltung'; $cfgServers[1]['verbose'] = ''; show the hostname $cfgServers[1]['bookmarkdb'] = ''; support $cfgServers[1]['bookmarktable'] = ''; support // MySQL user (only needed with basic auth) // MySQL password (only needed with basic // If set to a db-name, only this db is accessible // Verbose name for this host - leave blank to // Bookmark db - leave blank for no bookmark // Bookmark table - leave blank for no bookmark Sie starten phpMyAdmin durch die Eingabe von http://localhost/phpMyAdmin/index.php3. (Abb.10: PhpMyAdmin) Nach dem Start von phpMyAdmin erscheint das Begrüssungsfenster. PhpMyAdmin besteht aus einem Frameset. Im linken Frame wechseln Sie die aktuelle Datenbank und Tabelle, im rechten werden Abfragen ausgeführt. Um alle Tabellen einer Datenbank zu sehen, klicken Sie im linken Rahmen auf den Namen der Datenbank. Das entspricht dem MySQL-Befehl SHOW TABLES. Natürlich benötigen Sie die entsprechenden Zugriffsrechte. Datenbankbezogene Aktionen, wie beispielsweise das „Anlegen von Tabellen“ oder „Abfragen von Tabellen“ werden im linken Rahmen ausgeführt, indem Sie auf die Tabelle klicken, auf der sich die Aktion bezieht. Grundsätzlich kann man mit MySQL-Monitor und PhpMyAdmin die gleichen Funktionen ausführen. Gegebenenfalls unterscheidet sich die Vorgehensweise. Die Seite mit den Tabellenübersichten einer Datenbank enthält ein SQL-Fenster, in das Sie beliebige SQLBefehle eintippen können. Damit sind Sie nicht an die manchmal gewöhnungsbedürftige Menüführung von PhpMyAdmin gebunden. PHP und Datenbanken Verbindung zum Datenbankserver Um PHP mit einer MySQL-Datenbank zu verbinden, braucht man zuerst eine Verbindung zum Datenbankserver. Diese Verbindung ist Vorraussetzung, um eine bestimmte Datenbank auf dem Datenbankserver auszuwählen. Es stehen zwei Funktionen für diesen Zweck zur Verfügung: mysql_connect() und mysql_pconnect(). Der Unterschied zwischen diesen beiden Funktionen besteht darin, dass die Verbindung, die mysql_pconnect() erstellt, auch nach Ende des Programms bestehen bleibt und bei einem erneuten Aufruf von mysql_pconnect() wieder genutzt werden kann. Verbindungen, die mysql_connect() erstellt, verlieren nach Ablauf ihre Gültigkeit. Syntax: int mysql_connect(string host, string benutzer, string passwort); Der Funktion werden drei Parameter übergeben, die den Namen des Datenbankservers, den anzumeldenden Benutzer und dessen Passwort bestimmen. Der Rückgabewert ist ein sogenannter Link-Identifizierer, der für andere MySQL-Funktionen benötigt wird. Die Syntax von mysql_pconnect() ist gleich. Der Rückgabewert ist FALSE, wenn keine Verbindung zum Datenbankserver hergestellt werden konnte. Die Paramteter sind optional, Standardwerte sind host = localhost, benutzer = Benutzer und Passwort = keins. Auswählen der Datenbank Auf der Grundlage einer bestehenden Verbindung kann das PHP-Programm eine Datenbank auf dem Datenbankserver auswählen. PHP bietet für diesen Zweck die Funktion mysql_select_db(). Syntax: int mysql_select_db(string db_name [, int linkID]); Als Parameter werden der Name der Datenbank und der Rückgabewert der Funktion mysql_connect() übergeben. Diese Funktion liefert FALSE zurück, wenn die Datenbank nicht ausgewählt werden kann. Der Parameter linkID kann entfallen, PHP nutzt in diesem Fall den zuletzt erzeugten Link. Das gilt ebenso für alle anderen Funktionen, die linkID als optionalen Parameter enthalten. <?php ?> $linkID = mysql_connect("localhost", "root", ""); if (!$linkID) die("Es wurde keine Verbindung zum Datenbankserver hergestellt."); if (mysql_select_db("Personalwesen", $linkID)) echo("Die Datenbank Personalwesen wurde ausgewählt."); else die ("Fehler beim auswählen der Personalwesen!"); Befehle an die Datenbank schicken Wurde eine Verbindung zum Datenbankserver hergestellt und eine Datenbank auf diesem Server ausgewählt, können SQL-Befehle an die Datenbank geschickt werden. Für die Verwendung der Befehle INSERT, SELECT, UPDATE oder eines sonstigen SQLBefehles wird in PHP nur eine einzige Funktion verwendet. Syntax: int mysql_query(string sql [, int linkID]); Der Funktion mysql_query() werden eine SQL-Zeichenfolge und die linkID der Verbindung übergeben. Die SQL-Zeichenfolge soll aber kein abschließendes Semikolon enthalten. Der Rückgabewert ist eine ID, die Sie zum Abfragen der Ergebnismenge benutzen können. Ist die SQL-Abfrage fehlerhaft oder haben Sie keinen entsprechenden Zugriff auf die entsprechenden Tabellen, dann gibt diese Funktion den Wert FALSE zurück. Senden des SQL-Befehls SELECT name, adresse FROM Kunden: <?php $linkID = mysql_connect("localhost", "root", ""); if (!$linkID) die("Es wurde keine Verbindung zum Datenbankserver hergestellt."); if (mysql_select_db("Personalwesen ", $linkID)) echo("Die Datenbank Personalwesen wurde ausgewählt."); else die ("Fehler beim auswählen der Personalwesen!"); // SELECT-Befehl $abfrage = "SELECT * FROM job"; $resID = mysql_query($abfrage, $linkID); if (!resID) die ("Es ist ein Fehler in der SQL-Anweisung azufgetreten."); ?> Datensätze der Abfrage ermitteln Nachdem eine Abfrage an den Datenbankserver mit mysql_query() gesendet wurde, wird eine andere Funktion zum Erhalten der Daten vom Datenbankserver benötigt. Diese Funktion darf jedoch nur benutzt werden, wenn die gesendete Abfrage auch eine Ergebnismenge zurückliefert. Zum Abfragen der Daten eignet sich die Funktion mysql_fetch_array(). Syntax: Array mysql_fetch_array(int resID [, int ErgTyp]); Mysql_fetch_array() wird mit dem Rückgabewert der Funktion mysql_query() als erster Parameter aufgerufen. Der zweite optionale Parameter bestimmt, ob das Array ein indiziertes Array (MYSQL_NUM), ein assoziatives Array (MYSQL_ASSOC) oder beides (MYSQL_BOTH) ist. Der Rückgabewert der Funktion ist ein Array, das die Zelleninhalte eines Datensatzes enthält. Um mehrere Datensätze abzurufen, müssen die Funktionen erneut aufgerufen werden. Der Rückgabewert der Funktion ist FALSE, wenn kein weiterer Datensatz verfügbar ist. Bildschirmausgabe der Datensätze von SELECT name, adresse FROM Kunden. <?php $linkID = mysql_connect("localhost", "root", ""); if (!$linkID) die("Es wurde keine Verbindung zum Datenbankserver hergestellt."); if (mysql_select_db("Personalwesen ", $linkID)) echo("Die Datenbank Personalwesen wurde ausgewählt."); else die ("Fehler beim auswählen der Personalwesen!"); // SELECT-Befehl $abfrage = "SELECT * FROM job"; $resID = mysql_query($abfrage, $linkID); if (!resID) die ("Es ist ein Fehler in der SQL-Anweisung aufgetreten."); ?> // Ausgabe der Datensätze while ($zeile = mysql_fetch_array ($resID, MYSQL_BOTH)) { echo ("Name: " .$zeile[0]); echo (" - Adresse: " $zeile["adresse"] . "<br>\n"); Auf das erste Feld der Ergebnistabelle (Name) wird mit Hilfe des Index zugegriffen, auf das zweite Feld (Adresse) assoziativ. PHP-Funktionen für MySQL In diesem Kapitel werden einige wichtige PHP-Funktionen für MySQL-Datenbanken erläutert. mysql_affected_rows int mysql_affected_rows ([int resID]) Gibt eine Anzahl der Datensätze zurück, die nach einem UPDATE-, INSERT- oder DELETEBefehl betroffen waren. Der Parameter bestimmt die Ergebnis-ID von mysql_query(). mysql_close int mysql_close ([int linkID]) Schließt eine mit mysql_connect() geöffnete Verbindung. Wird die linkID weggelassen, wird die letzte geöffnete Verbindung geschlossen. Eine Verbindung eines PHP-Skripts wird jedoch automatisch geschlossen, wenn das Skript beendet ist. mysql_create_db int mysql_create_db(string dbName, [, int linkID]) Erstellen einer Datenbank mit den Namen dbName. mysql_data_seek int mysql_data_seek (int resID, int znummer) Bewegt den Datensatzzeiger der Abfrage in resID nach zNummer. mysql_db_query int mysql_db_query(string database, string abfrage [, int linkID]) Sendet einen SQL-Befehl, ermöglicht aber im Gegensatz zu mysql_query() zusätzlich die Angabe eines Datenbankservers. mysql_drop_db bool mysql_drop_db(string dbname [, int linkID]) Löscht die Datenbank dbName in der Verbindung von linkID. mysql_errno int mysql_errno([int linkID]) Gibt eine Fehlernummer der letzten MySQL-Operation der Verbindung linkID zurück. Der Rückgabewert ist 0, wenn kein Fehler auftrat. mysql_error string mysql_error([int linkID]) Gibt eine Fehlermeldung der MySQL-Operation zurück. mysql_escape_string string mysql_escape_string(string sql) Maskiert Sonderzeichen in einem SQL-Befehl. mysql_fetch_assoc Wie mysql_fetch_array, der Ergebnistyp ist aber ausschließlich ein assoziatives Array. mysql_fetch_field Object mysql_fetch_field(int resID [, int feldNr]) Mit mysql_fetch_field() kann man sich anhand der resID ein Objekt mit Feldinformationen aus einem Abfrage zurückgeben lassen. Gibt man den optionalen Parameter Feld-Offset nicht an, so werden die Informationen des nächsten Feldes geliefert, das noch nicht mit mysql_fetch_field() ausgegeben wurde. Eigenschaft Beschreibung Object->table Name der Tabelle, aus der das Feld stammt Object->max_lenght Maximale Spaltenbreite Object->not_null Enthält 1, wenn die Spalte keine NULL-Werte annehmen kann Object->primary_key Enthält 1, wenn die Spalte Primärschlüssel ist Object->unique_key Enthält 1, wenn die Spalte ein eindeutiger Schlüssel ist Eigenschaft Beschreibung Object->multiple_key Enthält 1, wenn die Spalte ein "gewöhnlicher" Schlüssel ist Object->numeric Enthält 1, wenn die Spalte numerisch ist Object->blob Enthält 1, wenn die Spalte ein BLOB ist Object->type Datentyp der Spalte Object->unsigned Enthält 1, wenn die Spalte keine negative Zahlen speichern kann Object->zerofill Enthält 1, wen die Spalte den Zusatz ZEROFILL hat mysql_fetch_object Wie mysql_fetch_array, aber der Rückgabewert besitzt eine Objektstruktur. mysql_fetch_row Wie mysql_fetch_array, aber der Rückgabewert ist ausschließlich ein indiziertes Array. mysql_insert_id int mysql_insert_id([int linkID]) Gibt den letzten eingefügten Autowert der Verbindung linkID zurück. Der Funktionsaufruf muss unmittelbar nach dem INSERT-Befehl erfolgen. Er funktioniert nicht, wenn die Autowert-Spalte den Datentyp BIGINT hat. mysql_num_fields int mysql_num_fields(int resID) Gibt die Anzahl der Spalten der Abfrage resID zurück. mysql_num_rows int mysql_num_rows(int resID) Gibt die Anzahl der Datensätze der Abfrage resID zurück, die eine SELECT-Abfrage war. Setzt man vor eine der oben angegebenen Funktionen ein „@“, dann wird die Fehlerausgabe der Funktion unterdrückt. Beispiel: <?php $linkID = mysql_connect("localhost", "root", ""); if (!$linkID) die("Es wurde keine Verbindung zum Datenbankserver hergestellt."); if (mysql_select_db("Personalwesen ", $linkID)) echo("Die Datenbank Personalwesen wurde ausgewählt."); else die ("Fehler beim auswählen der Personalwesen!"); // SELECT-Befehl $abfrage = "SELECT * FROM job"; // verursacht mysql_query einen Fehler, dann wird die Ausgabe unterdrückt $resID = @mysql_query($abfrage, $linkID); if (!resID) die ("Es ist ein Fehler in der SQL-Anweisung azufgetreten."); ?> Ein allgemeines Beispiel für PHP in Verbindung mit MySQL Datenbanken In diesem Kapitel möchte ich ein kleines PHP-Skript vorstellen, mit dem Sie Daten aus einer Tabelle ausgeben können. Das Skript greift auf die Datenbank „Personalwesen“ und die Tabelle „Job“ zu und gibt den Inhalt der Tabelle in einer HTML-Tabelle aus. <HTML><HEAD><TITLE></TITLE></HEAD> <BODY BGCOLOR="#FFFFF"> <?php // Verbidnung zu MySQL herstellen $linkID = mysql_connect("","",""); if (!$linkID) die("Es konnte keine Verbindung zu MySQL hergestellt werden."); // Datenbank "Personalwesen" auswählen if (mysql_select_db("Personalwesen", $linkID)) echo("Die Datenbank Personalwesen wurde ausgewählt."); else echo("Fehler!"); // einen SQL-Befehl an die Datenbank schicken $abfrage = "SELECT * FROM job"; $resID = mysql_query($abfrage, $linkID); if (!$resID) die ("Es ist ein Fehler in der Abfrage aufgetreten."); // Ausgabe der Datensätze in Tabellenform echo("<table border cellpadding=\"3\"><tr>"); while($field=mysql_fetch_field($resID)) echo("<th>$field->name</th>"); while ($zeile = mysql_fetch_array($resID,MYSQL_BOTH)) { echo("<tr>"); for($i=0; $i<mysql_num_fields($resID); $i++) echo("<td>".htmlentities($zeile[$i])."</td>"); echo("</tr>\n"); } echo("</table>"); ?> </BODY></HTML> Anlegen einer Datenbank unter MySQL Bevor Tabellen angelegt werden, ist es erforderlich eine Datenbank anzulegen. Der dazugehörige Befehl in MySQL lautet: CREATE DATABASE [IF NOT EXISTS] db_name; IF NOT EXISTS dient zum Überprüfen, ob die Datenbank bereits existiert oder nicht. Das Anlegen einer Datenbank in MySQL hat zur Folge, dass im Datenverzeichnis von MySQL z.B. C:\WEB\MYSQL\DATA ein Unterverzeichnis mit dem Namen der Datenbank erzeugt wird. (Abb.11: Erstellen einer Datenbank mit MySQL-Monitor) Datenbankbezogene SQL-Befehle in MySQL Befehl Funktion DROP DATABASE db_name; Dieser Befehl löscht die Datenbank db_name und alle darin enthaltenen Tabellen. USE db_name; Wählt db_name als aktuelle Datenbank aus. SHOW DATABASES; Listet alle verfügbaren Datenbanken auf. Für diese Diplomarbeit wurde die Datenbank Personalwesen aus dem Vorlesungsskript Datenbanken von Prof. Sauer als beispielhafte Anwendung benutzt (http://rfhs8012.fh- regensburg.de/~saj39122/DB/). Dazu muss zuerst die Datenbank mit dem CREATE DATABASE Befehl erzeugt werden, wir die untere Abbildung zeigt. Erstellen und Verwalten von Tabellen Als nächstes müssen die Tabellen der Datenbank Personalwesen erzeugt werden. Die Syntax dazu lautet: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(TABELLENDEFINITION, …)} [TABELLENOPTIONEN] [SELECT-Befehl] Das reservierte Wort TEMPORARY erzeugt eine flüchtige Tabelle, die nur solange besteht wie die Verbindung zur Datenbank. Der Befehl wurde jedoch beim Erstellen der Tabellen nicht benötigt. Durch die Angabe von IF NOT EXISTS wird keine Fehlermeldung ausgegeben, wenn die Tabelle bereits existiert. Allerdings werden die Strukturen von alter und neuer Tabelle nicht überprüft. Tabellen mit MySQL-Monitor anlegen Die zu erzeugenden Tabellen wurden mit einem Texteditor geschrieben und dann unter dem Dateinamen C:\EIGENE DATEIEN\DB\TABLES.SQL gespeichert. Die Tabellen haben folgenden Aufbau: CREATE TABLE abteilung (abt_id VARCHAR(2) NOT NULL PRIMARY KEY bezeichnung VARCHAR(40)); CREATE TABLE job (job_id VARCHAR(2) NOT NULL PRIMARY KEY, titel VARCHAR (30), gehalt DOUBLE(8,2)); CREATE TABLE angestellte (ang_id VARCHAR (3) NOT NULL PRIMARY KEY, name VARCHAR (10), gebdatum DATE, abt_id VARCHAR (2), CONSTRAINT FKabt_id FOREIGN KEY(abt_id) REFRENCES abteilung(abt_id) ON DELETE CASCADE, job_id VARCHAR(2), CONSTRAINT FKjob_id1 FOREIGN KEY(job_id) REFERENCES job(job_id) ON DELETE CASCADE); CREATE TABLE qualifikation(ang_id VARCHAR(3) NOT NULL, FOREIGN KEY(ang_id) REFERENCES angestellte(ang_id) ON DELETE CASCADE, job_id VARCHAR(2) NOT NULL, CONSTRAINT FKjob_id2 FOREIGN KEY(job_id) REFERENCES job(job_id) ON DELETE CASCADE, CONSTRAINT PKquali PRIMARY KEY(ang_id,job_id)); Um die Tabellen anzulegen, wechseln Sie in das MySQL-Verzeichnis in meiner Installation war das C:\WEB\MYSQL\BIN. Die Tabellen werden mit dem MySQL-Monitor in einer Kommandozeile wie folgt angelegt: \. C:\EIGENE~1\DB\TABLES.SQL (Abb.12: Erstellen der Tabellen mit MySQL-Monitor) Tabellen mit phpMyAdmin anlegen PhpMyAdmin bietet drei gängige Möglichkeiten, Tabellen anzulegen. Zuerst muss phpMyAdmin mit der URL http://localhost/phpmyadmin/index.php3 gestartet werden. Als nächstes muss die Datenbank Personalwesen ausgewählt werden. Variante 1 Eingeben eines SQL-Befehls in das SQL-Eingabefeld. Variante 2 Durch klicken auf den Button Durchsuchen kann eine Datei ausgewählt werden, die SQLBefehle enthält (z.B. C:\EIGENE DATEIEN\DB\TABLES.SQL). Variante 3 Die Tabellen können auch einzeln menügesteuert angelegt werden. Unter dem Menüpunkt Neue Tabelle erstellen in Datenbank Personalwesen kann die Tabelle mit der Anzahl der Felder festgelegt werden. (Abb.13: Auswahl einer Datenbank mit PhpMyAdmin) Bei Aktivieren des Buttons OK wird die Seite mit der Tabellendefinition angezeigt. (Abb.14: Erstellen von Tabellen mit PhpMyAdmin) Wurden alle CREATE TABLE-Befehle richtig ausgeführt, dann sollte die Datenbank folgenden Aufbau haben: (Abb.15: Tabellen der Datenbank „Personalwesen“ unter PhpMyAdmin) Hinzufügen von Datensätzen Es wurden nun alle vier Tabellen erzeugt. Nun können die dazugehörigen Datensätze mit dem SQL-Befehl INSERT in die Tabellen eingefügt werden. Die dazugehörige Syntax lautet: INSERT INTO tbl_name [(Spalte1, Spalte2, ...)] VALUES (Wert1, Wert2, ...); Die Daten werden in die Tabelle tbl_name eingefügt. Die Spaltennamen links von VALUES stehen mit den Werten rechts von VALUES in Beziehung. Für jeden Attributnamen auf der linken Seite muss auf der rechten Seite ein Wert stehen. Werden auf der linken Seite keine Attributnamen angegeben, dann muss auf der rechten Seite für jedes Attribut ein Wert angegeben werden. Die dazugehörigen Daten können von der Hompage von Prof. Sauer unter http://rfhs8012.fhregensburg.de/~saj39122/DB/ heruntergeladen werden und dann entweder über eine Datei mit den SQL-Monitor oder mit phpMyAdmin eingefügt werden. Es besteht außerdem die Möglichkeit, die Daten per Hand mit phpMyAdmin zu erstellen. Als Beispiel wurden die INSERT INTO-Befehle von aus dem Vorlesungsskript Datenbanken von Prof. Sauer (http://rfhs8012.fh-regensburg.de/~saj39122/DB/) in die Datei INSERTS.SQL geschrieben und dann über den SQL-Monitor erstellt. insert into abteilung values ('KO','Konstruktion'); insert into abteilung values ('OD','Organisation und Datenverarbeitung'); insert into abteilung values ('PA','Personalabteilung'); insert into abteilung values ('RZ','Rechenzentrum'); insert into abteilung values ('VT','Vertrieb'); insert into job values ('KA','Kaufm. Angestellter',3000.00); insert into job values ('TA','Techn. Angestellter',3000.00); insert into job values ('PR','Programmierer',3000.00); insert into job values ('SY','Systemplaner',6000.00); insert into job values ('IN','Ingenieur',6000.00); insert into job values ('OR','Operateur',3500.00); insert into angestellte values ('A1','Fritz','02.01.1950','OD','SY'); insert into angestellte values ('A2','Tom','02.01.1951','KO','IN'); insert into angestellte values ('A3','Werner','23.01.1948','OD','PR'); insert into angestellte values ('A4','Gerd','03.11.1955','VT','KA'); insert into angestellte values ('A5','Emil','02.03.1960','PA','PR'); insert into angestellte value ('A6','Uwe','03.04.1952','RZ','OP'); insert into angestellte values ('A7','Erna','17.11.1955','KO','TA'); insert into angestellte values ('A8','Rita','02.12.1957','KO','TA'); insert into angestellte values ('A9','Ute','08.09.1962','OD','SY'); insert into angestellte values ('A10','Willi','07.07.1956','KO','IN'); insert into angestellte values ('A12','Anton','05.07.1948','OD','SY'); insert into angestellte values ('A13','Josef','02.08.1952','KO','SY'); insert into angestellte values ('A14','Maria','17.09.1964','PA','KA'); insert into qualifikation values ('A1','SY'); insert into qualifikation values ('A1','PR'); insert into qualifikation values ('A1','OP'); insert into qualifikation values ('A2','IN'); insert into qualifikation values ('A2','SY'); insert into qualifikation values ('A3','PR'); insert into qualifikation values ('A4','KA'); insert into qualifikation values ('A5','PR'); insert into qualifikation values ('A6','OP'); insert into qualifikation values ('A7','TA'); insert into qualifikation values ('A8','TA'); insert into qualifikation values ('A9','IN'); insert into qualifikation values ('A9','SY'); insert into qualifikation values ('A10','IN'); insert into qualifikation values ('A11','KA'); insert into qualifikation values ('A12','SY'); insert into qualifikation values ('A13','IN'); insert into qualifikation values ('A14','KA'); (Abb.16: Insert-Befehle unter MySQL-Monitor) Die Daten können über den Button Einfügen mit phpMyAdmin auch eingefügt werden. (Abb.17: füllen der Tabellen mit Daten unter PhpMyAdmin) Man kann sich nun mit phpMyAdmin die Tabelleninhalte anzeigen lassen. Die Tabelle Angestellte sollte nun die folgenden Datensätze beinhalten: (Abb.18: anzeigen der Tabelleninhalte unter PhpMyAdmin) (Abb. 19: Datensätze der Tabelle „Angestellte“) PHP-Skripte in Anwendung mit einer MySQL-Datenbank am Beispiel der Datenbank Personalwesen In diesem Kapitel wird anhand einer beispielhaften Anwendung PHP mit einem MySQLZugriff vorstellen. Dazu wurde ein HTML-Formular entwickelt, das an ein PHP-Skript eine SQL-Anweisung abschickt und dann die SQL-Anweisung ausführt. Das HTML-Formular PHP_Formular (Abb.20: PHP-Formular) In diesem Formular kann man anhand der Radiobuttons die SQL-Anweisung auswählen, die von PHP verarbeitet werden soll. Wählt man den Button SELECT, kann im unteren Textfeld ein Select-Befehl eingegeben werden. Durch Aktivieren des Buttons „Abschicken“ wird der SELECT-Befehl an das PHP-Skript SQL.php3 weitergeleitet. Das PHP-Skript überprüft den eingegebenen SELECT-Befehl auf seine Richtigkeit und gibt dann das Ergebnis in einer Tabelle wieder aus. Als Datenbank wurde die Datenbank Personalwesen von aus dem Vorlesungsskript Datenbanken von Prof.. Sauer (http://rfhs8012.fh-regensburg.de/~saj39122/DB/) verwendet. Die Anweisung SELECT * FROM JOB; bewirkt dann folgende Ausgabe: (Abb.21: Ergebnis einer SELECT-Anweisung) Das Feld Nr dient nur zur Übersicht für den Benutzer und ist kein Primärschlüssel der Tabelle. Der eingegebene SQL-Befehl muss nicht mit Strichpunkt (;) beendet werden. Dieser Strichpunkt kann auch weggelassen werden. Gross- und Kleinschribung muss auch nicht beachtet werden. Es kann jeder beliebige SELECT-Befehl in das Textfeld des HTMLFormulars PHP_Formular eingegeben werden. Es können auch komplexere SELECT-Anweisungen an die Datenbank geschickt werden. Jeder Befehl unterstützt, der MySQL bekannt ist, wird unterstützt. Z.B. liefert die SELECT-Anweisung SELECT * FROM Angestellte, Qualifikation WHERE Angestellte.ang_id = Qualifikation.ang_id folgendes Ergebnis: (Abb.22: Ergebnis einer komplexeren SELECT-Anweisung) Code des Formulars <title>PHP-Skripte in Anwendung mit einer MySQL-Datenbank</title> <body bgcolor="#fffff#"><br> <h1>PHP-Skripte in Anwendung mit einer MySQL-Datenbank</h1> <form method="post" action ="SQL.php3"> <table> <h2>Es werden folgende SQL-Anweisungen von PHP unterstützt</h2> <table border="3"> <tr> <th><input type ="radio" NAME = "Auswahl" VALUE = "Select" CHECKED> SELECT </th> <th><input type ="radio" NAME = "Auswahl" VALUE = "Create" > CREATE-Table</th> </tr> <tr> <th><input type ="radio" NAME = "Auswahl" VALUE = "Update" >UPDATE<BR>&nbsp INSERT<BR> &nbsp DELETE</th> <th><input type ="radio" NAME = "Auswahl" VALUE = "Drop" >DROP-Table<BR> </tr> <tr> <th>&nbsp</th> <th><input type ="radio" NAME = "Auswahl" VALUE = "Alter" > ALTER-Table</th> </tr> </table> <BR><BR>Bitte geben Sie die SQL-Anweisung ein:<BR><BR> <textarea name="Anweisung" rows="10" cols="95"></textarea><br> <input type ="submit" Value ="Abschicken" size ="25"> <input type ="reset" Value = "Eingaben löschen" size = "25"> </form></body></head> Durch den HTML-Befehl <form method="post" action ="SQL.php3"> werden alle Eingaben des Formulars an die Datei SQL.php3 übergeben. Jeder Elementname wird in das globale Feld $_Post geschrieben, das von PHP zum ermitteln der übergebenen Variablen dient. Genauso gut kann der Inhalt des Formulars auch an dieselbe Datei geschickt werden. In PHP wird dann mit der foreach-Schleife, der Schleife für Felder, der Inhalt des Feldes $_Post über den Feldschlüssel $var ermittelt und in ein Feld mit den Namen $array() geschrieben. Danach kann über den Feldindex des beschriebenen Feldes $array() der Inhalt in die Variablen $Anweisung und $Auswahl geschrieben werden. In $Anweisung steht dann der SQL-Befehl und in $Auswahl der Inhalt der Radiogruppe. Die einzelnen Buttons können dann über den String wie z.B. „Select“ in PHP überprüft werden. Die Befehle zum ermitteln der Inhalte des Post-Befehls lauten: $array = array(); // ermitteln der Inhalte des Globalen Feldes $_Post, die über das HTML-Formular geschickt // wurden foreach ($_POST as $var => $value) { $array[] = $value; } // zuweisen der Feldinhalte $Auswahl = $array[0]; $Anweisung = $array[1]; Der Befehl zum überprüfen des Inhalts der des ausgewählten Radiobuttons lautet dann: if($Auswahl==“Select“) { // Anweisung } Tritt die If-Anweisung ein, so kann der SELECT-Befehl abgearbeitet werden. Das übernimmt jedoch das PHP-Skript SQL.php3 und wird im nächsten Abschnitt ausführlich erklärt. Die Inhalte der Post-Variable kann auch anders ermittelt werden. Man kann mit dem Befehl $HTTP_POST_VARS auf den Inhalt zugreifen. $HTTP_POST_VARS ist ebenfalls ein Feld und der Inhalt dieses Feldes kann z.B. mit $HTTP_POST_VARS[’Anweisung’] ermittelt werden. Der Vorteil dieses Befehls ist, das die Inhalte nicht mehr durch eine Schleife ermittelt werden müssen und diese Art der Ermittlung der Inhalte der Post-Variable ist sicherer (siehe Diplomarbeit von Zimmermann Stefan unter der folgenden Seite: http://rfhs8012.fh-regensburg.de/~saj39122/Meile.html). Die Befehle haben dann folgendes aussehen: // zuweisen der Feldinhalte $Auswahl = $HTTP_POST_VARS['Auswahl']; $Anweisung = $HTTP_POST_VARS['Anweisung']; Der Feldinhalt muss jedoch nicht unbedingt in die Variablen geschrieben werden. Das PHP-Skript der SQL-Anweisungen Für die Implementierung der SQL-Anweisungen wurde eine Klasse mysql_db erstellt, die folgendenen Inhalt umfasst: - Es soll eine automatische Verbindung zur Datenbank Personalwesen von Prof. Sauer hergestellt werden. - Es sollen die Befehle SELECT, UPDATE, INSERT, DELETE, CREATE-TABLE, ALTER-TABLE und DROP-TABLE ausgeführt werden. - Die eingegebenen SQL-Anweisungen müssen auf Fehler überprüft werden. - Bei allen Befehlen aus dem SELECT-Befehl soll der Name der betroffenen Tabelle mit ausgegeben werden. - Bei einem UPDATE-, INSERT- oder DELETE-Befehl soll die Tabelle komplett ausgegeben werden. Hauptprogramm und Klassenvariablen Im Hauptprogramm der Datei SQL.php3 wird eine Instanz der Klasse mysql_db erzeugt. Nun muss als nächstes der Inhalt des globalen Feldes $_Post, wie oben beschrieben ermittelt werden. Danach wird anhand der Radiobuttons des Formulars die SQL-Anweiung mit einer SWITCH-Anweisung ermittelt. Wird der Button SELECT ausgewählt, wird die Funktion query() aufgerufen, die den SELECT-Befehl weiterverarbeitet. Bei der Auswahl des Buttons UPDATE wird die Funktion geanderte_Dts() aufgerufen, die die SQLAnweisungen INSERT, UPDATE und DELETE verarbeitet usw. Syntax: $datenbank = new mysql_db; $array = array(); // ermitteln der Inhalte des Globalen Feldes $_Post, die über das HTML-Formular geschickt // wurden foreach ($_POST as $var => $value) { $array[] = $value; } // zuweisen der Feldinhalte $Auswahl = $array[0]; $Anweisung = $array[1]; // Select-Anweisung an die Datenbank schicken switch($Auswahl) { case "Select" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben."); else $datenbank->query($Anweisung); break; case "Update" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben."); else $datenbank->geanderte_Dts($Anweisung); break; case "Create": if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben."); else $datenbank->Create_Table($Anweisung); break; case "Alter" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben."); else $datenbank->Alter_Table($Anweisung); break; case "Drop" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben."); else $datenbank->Drop_Table($Anweisung); break; } Es wurden nur drei Klassenvariablen benötigt. Die Verbindung zur Datenbank mit $linkID, der Datenbankname $db und das Ergebnis der SQL-Anweisungen werden in die Variable $resID gespeichert. Diese Variablen sind in jeder Funktion der Klasse zugänglich. Syntax: class mysql_db { var $linkID = false; var $resID = false; var $db = "Personalwesen"; .... } Konstruktor der Klasse mysql_db Der Konstruktor der Klasse mysql_db ruft die connect_db() Funktion auf, die die Verbindung zur Datenbank herstellt. Syntax: // Konstruktor der Klasse mysql_db function mysql_db() { $this->connect_db(); } Die Funktion connect_db() In dieser Funktion wird die Verbindung zu MySQL und zur Datenbank Personalwesen hergestellt. Scheitert eine der beiden Anweisungen, wird eine Fehlermeldung ausgegeben, und das Programm wird abgebrochen. Syntax: // Verbindung zur Datenbank function connect_db() { // Verbindung zu MySQL herstellen $this->linkID = mysql_connect("","",""); if (!$this->linkID) { die("Es konnte keine Verbindung zu MySQL hergestellt werden.<BR><BR>"); return false; } else { echo("Die Verbindung zu MySQL wurde hergestellt.<BR><BR>"); } // Datenbank Personalwesen auswählen if (mysql_select_db($this->db, $this->linkID)) echo("Datenbank “ . $this->db . “ wurde ausgewählt.<BR><BR>"); else die("Es ist ein Fehler aufgetreten. Die Datenbank “ . $this->db . “ konnte nicht ausgewählt werden. <BR><BR>"); }// Ende der Funktion connect_db Die Funktion query($sql) Zuerst werden alle Backslashes (\) in der SQL-Anweisung entfernt. Gibt man nämlich bei einem SELECT-Befehl z.B. SELECT * FROM job WHERE job_id = ’KO’ ein, so wird vor jedes Hochkommazeichen ein Backslash angehängt. Der Befehl hat dann folgendes Aussehen: SELECT * FROM job WHERE job_id = \’KO\’ Mit der STRING-Funktion stripslashes($string) werden dann automatisch alle Backslashes entfernt. Als nächstes wird dann überprüft, ob sich im angegebenen SELECT-Befehl auch das Wort SELECT befindet. Das geschieht mit der STRING-Funktion stristr($string, $suchstring). Mit dieser Funktion kann innerhalb eines Strings nach einer bestimmten Zeichenkette gesucht werden. Wird das Wort SELECT nicht gefunden, so wird das Programm abgebrochen. Nun wird der übergebende String $sql ausgeführt. Dann wird mit der Funktion echoerror() die Richtigkeit der SQL-Syntax überprüft. Ist kein Fehler aufgetreten, so wird das Ergebnis anhand einer Tabelle ausgegeben. Zuerst werden die Feldnamen mit der Funktion mysql_fetch_field() geholt und als Spaltenüberschrift deklariert. Danach werden die Datensätze in einem array gespeichert und mit der Funktion mysql_num_fields() zeilenweise ausgegeben. Syntax: function query($sql) { // schneidet die Backslashes bei der Eingabe ab $sql = stripslashes($sql); // Suche nach dem Wort SELECT $treffer = stristr($sql, "Select"); if ($treffer==false) die("Sie haben keine korrekte SELECT-Anweisung eingegeben."); $this->resID = mysql_query($sql, $this->linkID); $this->echoerror(); echo("<table border cellpadding=\"3\"><tr>"); echo("<th>Nr</th>"); while($field=mysql_fetch_field($this->resID)) echo("<th>$field->name</th>"); $index = 0; while ($zeile = mysql_fetch_array($this->resID,MYSQL_BOTH)) { $index++; echo("<tr><td>$index</td>"); for($i=0; $i<mysql_num_fields($this->resID); $i++) echo("<td>".htmlentities($zeile[$i])."</td>"); } echo("</tr>\n"); echo("</table>"); }// Ende der Funktion query Die Funktion echoerror() In dieser Funktion wird die MySQL-Funktion mysql_error() aufgerufen, die einen englischen Fehlertext der zuvor ausgeführten Operation zurückgibt. Syntax: // Ausgabe bei einem Fehler function echoerror() { // Tritt ein Fehler in der SQL-Anweisung auf, dann bricht das Programm ab if( mysql_error()) { echo( mysql_error()."<BR><BR>"); echo("Das Programm wurde abgebrochen."); exit; } }// Ende der Funktion echoerror Die Funktion geanderte_Dts($sql) Wird ein UPDATE-, INSERT- oder DELETE-Befehl ausgeführt, dann wird die Funktion geanderte_Dts($sql) aufgerufen. Der Funktion wird der String $sql übergeben, der die SQL-Anweisung enthält. Genau wie bei der Funktion query() werden zuerst alle Backslashes aus dem SQL-Befehl entfernt und dann wird überprüft, ob sich eines der Wörter UPDATE, INSERT oder DELETE in der SQL-Anweisung befindet. Danach wird der SQL-Befehl an die Datenbank geschickt und es wird die Funktion echoerror() aufgerufen. Als nächste wird die Anzahl der Datensätze, die beim Befehl betroffen waren, zurückgegeben und es wird die Funktion get_tablename($sql, „Update“) aufgerufen. Syntax: // Betroffene Datensätze bei einem UPDATE, INSERT oder DELETE ermitteln function geanderte_Dts($sql) { // schneidet die Backslashes bei der Eingabe ab $sql = stripslashes($sql); // suche nach den Worten UPDATE, INSERT, DELETE $feld = array("Update", "Insert", "Delete"); $falg = false; foreach($feld as $element) { $treffer = stristr($sql, $element); if ($treffer==true) { $flag = true; break; } } if ($flag==false) die("Sie haben keine korrekte UPDATE-, INSERT-, oder DELETE-Anweisung eingegeben."); $this->resID = mysql_query($sql, $this->linkID); $this->echoerror(); if (mysql_affected_rows()==1) echo("Die SQL-Anweisung wurde durchgeführt. <BR> Es wurde mysql_affected_rows() . " Datensatz betroffen."); else echo("Die SQL-Anweisung wurde durchgeführt. <BR> Es wurden mysql_affected_rows() . " Datensätze betroffen."); ". ". $this->get_tablename($sql,"Update"); }// Ende der Funktion geanderteDts Die Funktion get_tablename($sql, $Art) Diese Funktion ermittelt den Tabellennamen, der bei einem UPDATE, INSERT, DELETE, ALTER-TABLE, DROP-TABLE oder CREATE-TABLE betroffen wurde. Bei einem UPDATE, INSERT oder DELETE wird danach die Funktion query() aufgerufen, um das geänderte Ergebnis anzeigen zu lassen. Zuerst wird ein dynamisches Feld angelegt, in dem später alle Tabellennamen gespeichert werden. Alle Tabellen werden mit mysql_list_tables() aufgelistet, und danach wird die Anzahl der Tabellen der Datenbank mit mysql_num_rows() ermittelt. Als nächstes wird eine Schleife über die Anzahl der Tabellen durchlaufen, und jeder Tabellenname wird in das Feld $tabellen gespeichert. Für jedes Element des Feldes $tabellen wird nun überprüft, an welcher Position es im String $sql vorkommt. Danach wird der Tabellenname ermittelt. Kommt eine der Tabellen im String vor, dann wird diese Tabelle ausgegeben. Die Art der Ausgabe wird mit einer SWITCH-Anweisung ermittelt. Syntax: function get_tablename($sql,$Art) { // dynamisches Feld für die Tabellennamen anlegen $tabellen = array(); // schreibe alle Tabellen in $result $result = mysql_list_tables($this->db,$this->linkID); $menge = mysql_num_rows($result); // hole die einzelnen Tabellennamen aus $result for($i = 0; $i < $menge; $i++) { $table_name = mysql_tablename($result,$i); // schreibe die Tabellennamen in das Feld tabellen $tabellen[] = $table_name; } foreach($tabellen as $element) { $treffer = strpos($sql,$element); if ($treffer==true) { $flag = true; $leerzeichen = strpos($sql, " ", $treffer); $div = $leerzeichen - $treffer; $tabelle = substr($sql,$treffer, $div); break; } } if ($flag == true) { switch($Art) { case "Update" : echo("<BR><BR>"); $this->query("Select * From " . $tabelle); break; case "Create" : echo("Die Tabelle " . $tabelle. " wurde erfolgreich erstellt."); break; case "Drop" : echo("<BR><BR>Die Tabelle wurde erfolgreich gelöscht."); break; case "Alter" : echo("<BR><BR>Die Tabelle " . $tabelle. " wurde erfolgreich geändert.<BR>"); $this->query("Select * From " . $tabelle); break; } } }// Ende der Funktion get_tablename Die Funktion Create_Table($sql) Zu Beginn der Funktion werden die Backslashes vom übergebenen String $sql abgeschnitten. Danach wird in der SQL-Anweisung nach dem String CREATE gesucht. Wurde der String gefunden, dann wird der Befehl ausgeführt. Die Funktion echoerror() wird aufgerufen und die neu erstellte Tabelle wird mit der get_tablename($sql) ausgegeben. Syntax: // In dieser Funktion wird eine neue Tabelle erzeugt function Create_Table($sql) { // schneidet die Backslashes bei der Eingabe ab $sql = stripslashes($sql); $treffer = stristr($sql, "Create"); if ($treffer==false) die("Sie haben keine korrekte CREATE-Anweisung eingegeben."); $this->resID = mysql_query($sql, $this->linkID); $this->echoerror(); $this->get_tablename($sql, "Create"); }// Ende der Funktion Create_Table Funktion Die Funktion Drop_Table($sql) Diese Funktion ist fast identisch mit der Funktion Create_Table($sql). Der Unterschied der beiden Funktionen besteht nur darin, dass nach dem String DROP in der SQLAnweisung gesucht wird. Syntax: // In diese Funktion wird eine Tabelle gelöscht function Drop_Table($sql) { // schneidet die Backslashes bei der Eingabe ab $sql = stripslashes($sql); $treffer = stristr($sql, "Drop"); if ($treffer==false) die("Sie haben keine korrekte DROP-Anweisung eingegeben."); $this->resID = mysql_query($sql, $this->linkID); $this->echoerror(); $this->get_tablename($sql, "Drop"); }// Ende der Funktion Drop_Table Die Funktion Alter_Table($sql) Die Funktion Alter_Table($sql) entspricht ebenfalls bis auf eine Kleinigkeit der Funktion Create_Table($sql). Es werden auch die Backslashes des String $sql abgeschnitten und dann wird nach dem Wort ALTER im String gesucht. Die SQL-Anweisung wird ausgeführt, und die betroffene Tabelle wird mit get_tablename($sql) ermittelt. Syntax: // In dieser Funktion wird eine Tabelle geändert function Alter_Table($sql) { // schneidet die Backslashes bei der Eingabe ab $sql = stripslashes($sql); $treffer = stristr($sql, "Alter"); if ($treffer==false) die("Sie haben keine korrekte ALTER-Anweisung eingegeben."); $this->resID = mysql_query($sql, $this->linkID); $this->echoerror(); $this->get_tablename($sql, "Alter"); }// Ende der Funktion Alter_Table