Skript PHP und MySQL

Transcription

Skript PHP und MySQL
MySQL-Hinweise
Fachhochschule Nordwestschweiz
Hinweise zur Arbeit mit MySQL
Warum soll ich mich überhaupt mit MySQL beschäftigen?
Nicht ganz bescheiden wird auf der MySQL-Website verkündet: „Die populärste
Open-Source-Datenbank der Welt“.
Tatsächlich entfaltet PHP seine volle Leistungsfähigkeit erst richtig in Verbindung mit
einer Datenbank. Die MySQL-Datenbank hat sich als Standard durchgesetzt. Sie ist
in vielen Webspace-Paketen bereits enthalten.
Inhaltsverzeichnis
1. Einleitung................................................................................................................ 2
2. Arbeiten auf der Kommandozeile ........................................................................... 3
3. Erstellen, Löschen, Wählen einer Datenbank......................................................... 4
4. Erstellen und Mutieren von Tabellen ...................................................................... 5
5. Daten in Tabellen bearbeiten.................................................................................. 7
6. MySQL-Funktionen in PHP..................................................................................... 8
7. Beispiel einer kleinen Anwendung.......................................................................... 9
7.1 Das Eingabeformular ........................................................................................ 9
7.2 Das Skript „Datenbank-Eintrag“ ........................................................................ 9
7.3 Lesen der Daten und Darstellung im Webbrowser.......................................... 10
8. Arbeiten mit phpMyAdmin..................................................................................... 11
9. Anhang ................................................................................................................. 14
9.1 Mögliche Spaltentypen in MySQL (nicht vollständig) ...................................... 14
9.2 Verwendung von Indizes................................................................................. 15
„Web-Engineering“
Seite 1 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
1. Einleitung
Ein DBS kann auf verschiedene Arten gesteuert werden: Entweder dialogorientiert,
im Batch-Betrieb oder durch andere Programme. Dialogorientiert bedeutet, daß Sie
am Bildschirm Befehle eingeben und innerhalb von Sekunden das Ergebnis (evtl. die
Fehlermeldung) erhalten. Das ganze ist vergleichbar mit der Konsole beim
Betriebssystem. In beiden Fällen gibt es einen Prompt, an dem man seine Befehle
eingibt und im selben Fenster erscheint dann die Ausgabe.
Über den MySQL-Prompt hat man natürlich die meisten Möglichkeiten, weil man
jeden Befehl verwenden kann. Häufig ist aber auch ein wenig Unterstützung durch
ein Programm praktisch, das z.B. die Tabellenstruktur anzeigt oder beim Ändern die
alten Werte als Vorbelegung nimmt etc. Dafür gibt es das Programm PHPMyAdmin.
Alle Befehle, die wir hier im ersten Teil direkt eingegeben haben, könnten Sie auch in
eine Text-Datei schreiben, welche Sie dann „dialogorientiert“ als Batchdatei
abarbeiten lassen würden. Das nennt man dann Batch-Betrieb. Dies könnte zum
Beispiel für die Erstellung von Tabellen eingesetzt werden.
Der Benutzer (Client, Webbrowser) muss ja nicht wissen, dass da im Hintergrund mit
einer Datenbank gearbeitet wird. Alle Suchmaschinen im WWW (Google, AltaVista,
Yahoo) benutzen Datenbanken, um Informationen zu speichern. Als Benutzer sieht
man aber nur die Suchmaske und bekommt dann die Ergebnisse schön formatiert
angezeigt. Programme die dies erledigen (die eingegebene Anfrage an die
Datenbank weiterreichen und dann die Ergebnisse formatiert ausgeben), werden oft
in PHP oder Perl geschrieben.
Diese Kommandos können wir natürlich auch in PHP-Skripten (oder Perl-Skripten)
verwenden. Speziell bei der Umsetzung der Gruppenarbeit wird das Ihre Aufgabe
sei.
„Web-Engineering“
Seite 2 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
2. Arbeiten auf der Kommandozeile
Wir wollen Tabellen mittels der DDL (Data Definition Language), die ein Teil von SQL
ist, anlegen und verändern.
Natürlich gibt es heute viele grafische Tools. Dennoch ist es von Nutzen, wenn Sie
diese Kommandos kennen. Denn später werden Sie diese Kommandos in Ihren
Programmen einsetzen müssen.
Öffnen Sie unter „Start“, „Alle Programme“, „Zubehör“ die „Eingabeaufforderung“.
Wechseln Sie mit „cd“ in das Verzeichnis c:\programme\xampp\mysql\bin.
Öffnen Sie dann mysql mit folgendem Befehl:
mysql --user=benutzername --password
(z.B. mysql --user=root --password)¨
Sie haben auch die Möglichkeit direkt beim Einwählen eine Datenbank auszuwählen.
Das sieht dann wie folgt aus:
mysql -u benutzername -p datenbank_name
(z.B. mysql -u root -p test_datenbank)
Sie werden nun aufgefordert Ihr Passwort einzugeben. Anschliessend sollten Sie
etwa folgendes Fenster vor sich haben:
mysql>
Immer dann, wenn in der letzten Zeile ein mysql> steht, können Sie Befehle
eingeben. Die Groß-/Kleinschreibung ist bei den Befehlen egal, bei den Tabellenund Spaltennamen (Attribute) sowie den eigentlichen Werten dagegen natürlich
nicht!
Hinter jedem Kommando müssen Sie ein ; oder ein \g als Abschluss eingeben.
„Web-Engineering“
Seite 3 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
3. Erstellen, Löschen, Wählen einer Datenbank
mysql> create database datenbank_name;
Damit erzeugen Sie eine Datenbank, die vorerst noch keine Tabellen enthält. Wählen
Sie einen Datenbanknamen, der keine Probleme erzeugt, also ohne Leerzeichen und
z.B. alles Kleinbuchstaben.
Ob Ihre Datenbank angelegt wurde, testen Sie mit dem Kommando:
mysql> show databases;
Wenn Sie die Datenbank wieder löschen wollen, verwenden Sie das Kommando:
mysql> drop database datenbank_name;
Bevor Sie Tabellen anlegen oder mit Tabellen arbeiten können, müssen Sie in
MySQL eine Datenbank auswählen. Falls Sie sich nicht bereits beim Einwählen für
eine Datenbank entschieden, können Sie diese nun wie folgt wählen:
mysql> use datenbank_name;
„Web-Engineering“
Seite 4 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
4. Erstellen und Mutieren von Tabellen
mysql> create table name_der_tabelle
Beispiel einer Tabellenerstellung:
create table adressen
(
NR
integer,
name
varchar(255),
vorname
varchar(255),
strasse
varchar(255),
ort
varchar(255),
primary key(NR)
)
* Spaltentypen siehe Anhang
Mit dem Kommando “show tables” können Sie nun überprüfen, ob Ihre Tabelle
korrekt angelegt wurde.
mysql> show tables;
Mit dem folgenden Kommando können Sie sich die Struktur der neuen Tabelle
anzeigen lassen.
mysql> describe tabellen_name;
Erzeugung von Indizes
Pro Tabelle dürfen Sie nicht mehr als für 16 Spalten einen Index festlegen.
Man könnte also oben im „create table“ noch folgende Zeile nach „primary key (NR)“
einfügen:
index index_name (spalten_name);
Der Indexname ist wichtig, wenn Sie den Index einmal löschen wollen (alterAnweisung: alter table tabellen_name drop index index_name;).
Im Anhang finden Sie eine kurze Erklärung zu den Indizes!
„Web-Engineering“
Seite 5 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
Ändern von Tabellennamen:
mysql> alter table tabellen_name rename neuer_tabellen_name;
Hinzufügen von Spalten:
mysql> alter table tabellen_name add column spalten_name spalten_typ
attribute;
Mögliche Attribute in dieser Anweisung:
- null
# Null-Werte sind erlaubt
- not null
# Inhalt darf nicht NULL sein!
# ohne Attribut „null“ oder „not null“ sind Nullwerte erlaubt.
- default
# Default-Wert wird vorgegeben „default 10“
Das Löschen von Spalten ist etwas einfacher ;-):
mysql> alter table tabellen_name drop column spalten_name;
Ändern von Spaltennamen und Spaltentypen: Wenn Sie einen Spaltennamen
umbenennen wollen, dann müssen Sie allenfalls auch Attribute nochmals definieren:
mysql> alter table tabellen_name change alter_name neuer_name int not null;
Wenn Sie also die Spalte „name“ vom Typ char(200) in eine Spalte vom Typ
varchar(200) ändern wollen, dann geht das so:
mysql> alter table adressen change name name varchar(200);
„Web-Engineering“
Seite 6 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
5. Daten in Tabellen bearbeiten
Werte einfügen:
mysql> insert into tabellen_name (spalte1, spalte2, spalte3, spalte4, …) values
(wert1, wert2, wert3, wert4, …);
Mit dem folgenden Kommando können Sie sich alle Datensätze in der Tabelle
adressen anzeigen lassen:
mysql> select * from tabellen_name;
Mit diesem Kommando könnten Sie diesen Datensatz wieder löschen:
mysql> delete from tabellen_name where name=’name’;
(z.B. mysql> delete from adressen where name=’Meier’;)
Speziell die hier erwähnten Kommandos, um mit Daten in den Tabellen zu arbeiten,
wollen wir nun direkt in unseren PHP-Skripten einbauen.
PHP kennt einige Funktionen um mit MySQL zu arbeiten.
Im nächsten Kapitel möchten wir die wichtigsten dieser Funktionen vorstellen und
dann im übernächsten Kapitel ein Beispiel betrachten.
„Web-Engineering“
Seite 7 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
6. MySQL-Funktionen in PHP
mysql_connect()
Stellt Verbindung zu einer MySQL-Datenbank her.
Beispiel:
mysql_connect("localhost","benutzer","passwort");
mysql_close()
Schliesst die Verbindung zu MySQL.
Beispiel:
mysql_close();
mysql_select_db()
Sie selektieren die DB, mit welcher Sie arbeiten wollen.
Beispiel:
mysql_select_db("test_datenbank");
mysql_query()
Werden Sie häufig benutzen – die Abfrage.
Beispiel:
mysql_query("select * from adressen");
mysql_fetch_array()
Das Ergebnis einer Abfrage auslesen.
Beispiel:
mysql_fetch_array($ergebnis_der_query);
Die vorhergehende Abfrage mysql_query() muss vorgängig in die Variable
$ergebnis_der_query gespeichert werden.
$ergebnis_der_query = mysql_query("select * from adressen");
mysql_num_rows()
Sagt Ihnen, wie viele Zeilen Ihre Abfrage geliefert hat.
Beispiel:
mysql_num_rows($ergebnis_der_query);
mysql_error()
Liefert eine Fehlermeldung falls es Probleme mit einer Abfrage gibt.
Beispiel:
$result = mysql_query($query) or die (mysql_error());
Æ wird oft mit der Funktion „die“ verwendet bei Abfragen
„Web-Engineering“
Seite 8 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
7. Beispiel einer kleinen Anwendung
7.1 Das Eingabeformular
<HTML>
<HEAD>
<TITLE> Formular - Tabelleneintrag in MySQL
</TITLE>
</HEAD>
<BODY>
<H3> Ihr Eintrag in unsere Tabelle "adressen" </H3>
<FORM ACTION="mysql_tabelleneintrag.php"
method="post">
<FONT SIZE="3" FACE="arial">
<TABLE border="0">
<TR>
<TD>Nr: </TD>
<TD><INPUT TYPE="text" NAME="NR" SIZE="30" MAXLENGTH="40"></TD>
</TR>
<TR>
<TD>Name: </TD>
<TD><INPUT TYPE="text" NAME="name" SIZE="30" MAXLENGTH="40"></TD>
</TR>
<TR>
<TD>Strasse: </TD>
<TD><INPUT TYPE="text" NAME="strasse" SIZE="30" MAXLENGTH="40"></TD>
</TR>
<TR>
<TD>Ort: </TD>
<TD><INPUT TYPE="text" NAME="ort" SIZE="30" MAXLENGTH="40"></TD>
</TR>
</TABLE>
<BR></FONT>
<INPUT TYPE="Submit" NAME="OK" VALUE="Senden">
<INPUT TYPE="reset" NAME="zur&uuml;cksetzen" VALUE="Zur&uuml;cksetzen">
</FORM>
</BODY>
</HTML>
7.2 Das Skript „Datenbank-Eintrag“
<?PHP
echo "<H1>Ihre Daten wurden in die Tabelle \"adressen\" eintragen</H1><BR>\n";
$feld1=$_POST[NR];
$feld2=$_POST[name];
$feld3=$_POST[strasse];
$feld4=$_POST[ort];
$benutzer = "root";
$passwort = "test";
$dbname = "test_datenbank";
mysql_connect("localhost", $benutzer, $passwort);
mysql_select_db($dbname);
$insert = "INSERT INTO adressen (NR, name, strasse, ort) values ('$feld1', '$feld2', '$feld3', '$feld4')";
$db = mysql_query("$insert") or die(mysql_error());
mysql_close();
?>
„Web-Engineering“
Seite 9 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
7.3 Lesen der Daten und Darstellung im Webbrowser
<?PHP
echo "<H1>Folgende Einträge enthält die Tabelle \"adressen\"</H1><BR>\n";
$benutzer = "root";
$passwort = "test";
$dbname = "test_datenbank";
mysql_connect("localhost", $benutzer, $passwort);
mysql_select_db($dbname);
$abfrage = "select * from adressen";
$ergebnis = mysql_query($abfrage) or die(mysql_error());
echo "<table border=\"1\">";
while ($zeile=mysql_fetch_array($ergebnis, MYSQL_ASSOC))
{
echo "<tr>";
while (list($schluessel,
$wert)=each($zeile))
{ echo "<td>".$wert."</td>"; }
echo "</tr>";
}
echo "</table>";
mysql_close();
?>
„Web-Engineering“
Seite 10 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
8. Arbeiten mit phpMyAdmin
8.1 Allgemeines zu phpMyAdmin
Sehr wahrscheinlich gefallen Ihnen die Kommandozeilenanweisungen so gut, dass
Sie auf eine grafische Benutzeroberfläche verzichten wollen ;-).
PHPMyAdmin ist ein PHP-basiertes MySQL-Administrierungssystem, d.h. es stellt
eine Möglichkeit dar, über einen gewöhnlichen Web-Browser eine MySQLDatenbank zu verwalten (Benutzer, Datenbanken, Tabellen und Datensätze anlegen,
ändern und löschen). Dabei besteht die Möglichkeit, das System so einzurichten, daß
alle MySQL-Nutzer eines Systems sich einloggen und dabei natürlich nur ihre
eigenen Datenbanken (genauer: die, für die sie Rechte besitzen) sehen und
bearbeiten können. Auch für den Systemverwalter gibt es einige
Einstellungsmöglichkeiten wie das Anlegen neuer Nutzer inklusive dem
obligatorischen MySQL-Neustart oder Rechtevergabe.
Richtig eingesetzt, kann PHPMyAdmin fast vollständig das ,mysql`
Kommandozeilenprogramm ersetzen, denn sogar Im- und Export von fertigen SQLDateien ist möglich. Von Vorteil ist natürlich die Umsetzung des Systems in HTML:
Während beim Kommandozeilenprogramm schnell die Übersichtlichkeit verloren
geht, wenn große Tabellen ausgegeben werden sollen, macht PHPMyAdmin von
gewöhnlichen HTML-Tabellen Gebrauch und bietet dabei direkt sinnvolle
Editiermöglichkeiten und Vereinfachungen.
Für Nutzer von Billig-Webhosting Angeboten ist ein Zugriff auf die mysqlKommandozeile gar nicht möglich und dadurch PHPMyAdmin eine sehr einfache
Alternative, trotzdem entsprechende Möglichkeit zu bekommen.
Auf der PHPMyAdmin-Homepage http://www.phpmyadmin.net/ finden sich immer die
aktuellen Versionen des Pakets.
Wenn man nachfragt, ist bei Anbietern von serverseitiger PHP- und MySQLUnterstützung oftmals PHPMyAdmin schon installiert, damit die Administratoren
selbst effizienter arbeiten können. Im Zweifelsfall lohnt es sich, einfach mal zu fragen,
ob dieses System angeboten wird und für Mitglieder auch frei verfügbar ist. Für
letzteres ist nämlich nicht viel zu machen, lediglich ein Nutzer mit Leserechten auf die
,, mysql``-Datenbank muß angelegt werden, was auch kein Sicherheitsrisiko darstellt
angesichts der Tatsache, daß die dort abgelegten Paßworte durch den verwendeten
Verschlüsselungs-Algorithmus praktisch unknackbar sind.
Sie finden also auf zahlreichen Webseiten Anleitungen zu PHPMyAdmin!
„Web-Engineering“
Seite 11 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
8.2 Hinweise zu phpMyAdmin
Auswahl / Erstellung der Datenbank
Wählen Sie hier die
Datenbank, mit der
Sie arbeiten wollen!
Oder geben Sie hier den
Namen Ihrer neuen
Datenbank ein!
Wenn Sie eine Datenbank ausgewählt haben wählen Sie eine Tabelle aus (oder
erstellen eine Tabelle). In diesem Beispiel wurde die einzige Tabelle Adressen
angewählt und danach wurde der Button „Anzeigen“ angewählt.
Wenn Sie den Button Struktur
wählen können Sie die
Spaltentypen und die gesetzten
Attribute sehen!
„Anzeigen“ wurde hier
angewählt. Deshalb unten die
Darstellung der Tabelle mit
den 3 Einträgen
Hier können Sie die
Tabelle auswählen!
(In dieser DB gibt es
nur eine Tabelle)
„Web-Engineering“
Seite 12 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
Wenn Sie in der Menuleiste auf „Einfügen klicken“ können Sie neue Datensätze
erfassen:
Es wird Ihnen angezeigt,
welches SQL-Kommando
ausgeführt wurde!
Mit der Auswahl „Suche“
können Sie SELECTAnfragen ausführen!
Mit der Auswahl „Operationen“
können einfach neue Tabellen
erstellt werden!
(kopieren und anpassen)
Ich hoffe, dass Sie nach dieser
kurzen Anleitung weiterhin gerne mit
den Kommandozeilenanweisungen
arbeiten ;-)
„Web-Engineering“
Seite 13 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
9. Anhang
9.1 Mögliche Spaltentypen in MySQL (nicht vollständig)
a) für Texte
char(Länge)
Der Typ char erlaubt Zeichenketten von max. 255 Zeichen. Dieser Spaltentyp hat eine feste Länge, d.
h. wenn Sie einen Wert einfügen, der kürzer ist als die maximale Länge, dann werden die restlichen
Zeichen mit Leerzeichen aufgefüllt. Wenn eine Spalte als var(10) definiert wurde und Sie den Wert
„Hallo“ einfügen, dann wird MySQL diesen Text und dahinter noch 5 Leerzeichen speichern.
varchar(Länge)
Dieser Typ ist fast identisch mit char und wird an vielen Stellen verwendet, an denen man auch char
einsetzen könnte. Auch hier beträgt die maximale Länge 255 Zeichen. Dieser Typ ist jedoch ein Typ
variabler Länge. Hier werden also die kürzeren Werte nicht mit Leerzeichen ergänzt. Stattdessen
speichert MsSQL für jede Zelle dieses Typs ein weiteres Zeichen, das die Länge des Wertes angibt.
MySQL entfernt bei diesem Datentyp alle Leerzeichen am Ende eines Strings.
text
Der Typ text kann Texte bis zu 65'535 Zeichen speichern. Es können Indizes für die ersten 255
Zeichen in jeder Spalte erzeugt werden.
mediumtext
Der Typ mediumtext kann Texte bis zu 16'777’215 Zeichen speichern. Es können Indizes für die
ersten 255 Zeichen in jeder Spalte erzeugt werden.
enum(’wert1’, ’wert2’, ’wert3’ …) [default ’wert’]
Dieser Typ ist immer dann nützlich, wenn Sie nur wenige Alternativen ermöglichen wollen (z.B. „ja“
oder „nein“). Sie können also den Wertebereich der Inhalte für eine Spalte limitieren.
b) für Zahlenwerte
int(display size) [unsigned] [zerofill]
Der Typ integer hat einen Wertebereich von -2'147'483'648 bis + 2'147'483'647. Wenn Sie die Option
„unsigned“ wählen geht der Bereich von 0 bis 4'294'967'295.
Int wird oft im Zusammenhang mit der automatischen Inkrementierung verwendet, um als
Tabellenschlüssel zu dienen.
Beispiel:
create table meine_tabelle
{
tabellen_nr int unsigned auto_increment primary key,
Spalte_1 text
};
tinyint(display size) [unsigned] [zerofill]
Ohne Vorzeichen sind Werte von 0...255 möglich. Mit Vorzeichen von -128 bis 127.
mediumint(display size) [unsigned] [zerofill]
Ohne Vorzeichen sind Werte von 0...1'677'215 möglich. Mit Vorzeichen von -8'388’608 bis +8'388’607.
„Web-Engineering“
Seite 14 von 15
MySQL-Hinweise
Fachhochschule Nordwestschweiz
bigint(display size) [unsigned] [zerofill]
Wertebereich: + - x Milliarden
float[(M,D)] [zerofill]
Dieser Typ eignet sich für kleine Fliesskommazahlen und ist immer mit einem Vorzeichen versehen.
Der Wertebereich geht von -3,402'823’46E+38 bis -1,175'494'351E-38, Null, und von 1,175'494’351E38 bis 3,402'823’466E+38.
M ist die Anzahl der dargestellten Stellen und D ist die Anzahl der Nachkommastellen.
float(Genauigkeit) [zerofill]
Dieser Typ speichert Fliesskommazahlen und kann nur mit Vorzeichen arbeiten. Das Attribut für die
Genauigkeit kann <=24 sein, dann wird die einfache Genauigkeit zwischen 25 und 53 liegen, wobei
dann mit doppelter Genauigkeit gearbeitet wird.
double[(M,D)] [zerofill]
Definiert eine Gleitkommazahl in doppelter Genauigkeit mit Vorzeichen. Wertebereich Æ enorm
(+-x.y E+-308).
9.2 Verwendung von Indizes
Ein Vorteil einer relationalen Datenbank ist die Geschwindigkeit, mit der auch grosse
Mengen von Daten durchsucht und bearbeitet werden können. Um diese
Geschwindigkeit zu erreichen, arbeiten Datenbanken mit einer hochoptimierten
Datenstruktur, dem Index.
Der Index erlaubt es dem Datenbank-Server, eine Repräsentation einer
Tabellenspalte zu erzeugen, die rasend schnell durchsucht werden kann. Indizes
sind besonders nützlich, wenn es darum geht, einzelne Zeilen oder Gruppen von
Zeilen innerhalb von grossen Tabellen zu suchen.
Angesichts dieser Vorteile könnte man meinen, man würde am besten für jede Spalte
einen Index erzeugen. Indizes können aber auch zu einem Bremsklotz werden. Ein
Datenbanksystem benötigt Zeit um einen Index zu erstellen und diesen zu verwalten.
Es macht keinen Sinn Strukturen zu erzeugen, die später nie benutzt werden.
Ausserdem verbrauchen die Indizes eine Menge Platz auf der Festplatte.
Der Schlüssel einer Tabelle wird sehr häufig als Suchkriterium verwendet. Daher wird
automatisch von der Spalte, die als Schlüssel dient, ein Index erstellt.
„Web-Engineering“
Seite 15 von 15