mySQL PHP

Auf dieser Seite wurden viele der PHP Scripte in Kommentarzeichen gesetzt, da sonst bei jedem Aufruf der Seite neue Datenbanken angelegt oder verändert würden.

Datenbanken / Grundwissen

Bevor man mit MySQL beginnt, ist ein gewisses Grundwissen in Sachen Datenbank erforderlich. Vielleicht werde ich diese Informationen später erweitern.

Vielleicht schaut ihr mal zuerst auf dieser Seite vorbei. http://www.schattenbaum.net/php/mstart.php

Alleine mit PHP kann man nicht auf MySQL Datenbanken zugreifen. Hier kommt noch die standardisierte Abfragesprache SQL zum Einsatz.

Datenbanken werden in Form von Tabellen angelegt, in denen es Zeilen und Spalten gibt.
Die Zeilen nennt man Datensätze oder Records.
Die Spalten nennt man Columns, Attribute oder Felder.

Die einzelnen Spalten können unterschiedliche Datentypen enthalten, wie Text CHAR(), Zahlen INTEGER, Datumswerte DATUM etc. Eine der Spalten enthält den Primärschlüssel, der in der Regel aus einer fortlaufenden Nummer besteht, damit man die einzelnen Datensätze (Zeilen) eindeutig identifizieren kann.

In einer Datenbank werden Tabellen miteinander verbunden. Dazu folgendes Beispiel: Es gibt eine Tabelle der Kundendaten mit Name, Anschrift, Kundennr. und eine Tabelle Bestellungen. Beide Tabellen enthalten die Spalte Kundennr. über den sie miteinander verbunden werden. Diese Spalte bezeichnet man als Schlüssel.

Damit keine Fehler erzeugt werden, muss man doppelte Merkmalswerte ausschließen. Außerdem dürfen die Tabellen keine widersprüchlichen Werte enthalten. Man spricht hier von Datenbankintegrität.

MySQL Verbindung mit PHP

Im folgenden Script wird die MySQL-Verbindung hergestellt und die einzelnen Datenbanken in einer for-Schleife ausgegeben.

<?php
$Server = mysql_connect ("localhost", "pastor", "pixel");
$Ergebnis = mysql_list_dbs ($Server);
for ($n = 0; $n < mysql_num_rows($Ergebnis); $n++) {
echo mysql_result($Ergebnis, $n);
echo "<br>";
}
?>

Im Powerweb von Strato hat man nur eine Datenbank mit mehreren Tabellen. In einer if-Bedingung wird überprüft, ob der Datenbankname richtig ist. !Ausrufezeichen am Anfang steht für Bedingung nicht erfüllt. Durch die() wird eine Fehlermeldung ausgegeben und das Script abgebrochen.
Es folgt ein ähnliches Script, wie im vorigem Beispiel. Anstatt einzelner Datenbanken, werden hier die Tabellen mit mysql_list_tables() ausgegeben. mysql_num_fields() übergibt die Anzahl der Spalten. In der for-Schleife werden nicht die Zeilen, sondern die einzlenen Felder (Spalten) der Tabelle ausgegeben.

<?php
$Verbindung = mysql_connect ("rdbms.strato.de", "U12345", "meinPasswort");
$query = "use DB12345";
if(!mysql_query($query, $Verbindung)) die("Datenbank existiert nicht.\n");

$Ergebnis = mysql_list_tables ("DB12345");
for ($n = 0; $n <= mysql_num_fields($Ergebnis); $n++) {
echo mysql_result($Ergebnis, $n);
echo "<br>";
}
?>

 

mysql_connect()
hier wird eine Verbindung zum mySQL-Server hergestellt, die Argumente sind, Name des Host, Benutzername, Passwort. mehr dazu siehe unten

mysql_list_dbs()
als Argument wird die Verbindungs-ID übergeben, die man durch mysql_connect() erhält. Hier wird der Zeiger auf die Datenstruktur (Datenbanknamen) gesetzt.

mysql_num_rows()
erwartet als Argument das Ergebnis von mysql_list_dbs() und liefert die Anzahl der Zeilen.

mysql_result()
Als Argument wird hier der Zeiger erwartet, der durch mysql_list_dbs() zurückgegeben wird. Als zweites Argument wird die gewünschte Zeile eingegeben. siehe auch

Verbindung auslagern

Da man in der Regel auf mehreren PHP Seiten immer wieder auf die gleiche Datenbank zugreift, macht es Sinn die Funktionen für die Verbindung in einer extra Datei auszulagern und diese dann mittels include einzubinden. In einigen Beispielen beziehe ich mich auf diese Datei verbindung.php. Du musst dir also auch so eine Datei erstellen, mit deinen Verbindungsdaten, um diese Beispiele zu nutzen.

Inhalt der Datei verbindung.php

<?php

$hostname = "rdbms.strato.de";
$username = "U12345";
$password = "meinPasswort";
if(!$conn = mysql_pconnect($hostname, $username, $password)) {
die("Verbindung zur Datenbank konnte nicht hergestellt werden. Errorcode: ".mysql_error());
}
$db = "D12345";
if(!mysql_select_db($db)) {
die("Die Datenbank $db konnte nicht ausgewaehlt werden. Errorcode: ".mysql_error());
}
?>

Einbinden der Datei mittels include und Zugriff auf die Tabelle artikel

<?php include("verbindung.php"); ?>
<?php
$sql = "SELECT * FROM artikel";
if(!$query = mysql_query($sql)) {
die("Das SQL-Statement konnte nicht durchgefuehrt werden. Errorcode: ".mysql_error());
}
?>

 

Neue Datenbank anlegen

Eine Datenbank kann also aus mehreren miteinander verbundenen Tabellen bestehen. In MySQL werden alle Datenbanken als Unterverzeichnisse des Ordners data angelegt. In diesem Ordner befinden sich alle Dateien, die zur Datenbank gehören.
Es gibt verschiedene Möglichkeiten eine Datenbank anzulegen.

mysql_create_db() erzeugt eine neue Datenbank per PHP-Anweisung. Als erstes Argument wird der gewünschte Datenbankname eingegeben (keine Sonderzeichen), als zweites Argument die Verbindungs-ID.

<?php
$Server = mysql_connect ("localhost", "pastor", "pixel");
mysql_create_db("meinShop", $Server);
?>

Tabellen definieren

Hier werden Tabellen in einer Datenbank angelegt der Befehl lautet:
mysql_db_query()
erstes Argument: Name der Datenbank (keine Sonderzeichen)
zweites Argument: ein SQL String

Das folgende Script erzeugt zwar die Tabelle in der Datenbank "meinShop", aber hier werden keinerlei Überprüfungen vorgenommen. Von daher sollte man es in dieser Form nicht einsetzen.
In $SQLString wird ein SQL-String hinterlegt, mit den einzelnen Feldnamen und ihren Datentypen (evt. inclusive Feldlänge) durch Kommata getrennt, dazu später mehr. Anschließend erzeugt mysql_db_query() die Tabelle mit den beiden Argumenten, Name, String.

  <?php
$Server = mysql_connect ("localhost", "pastor", "pixel");
$Ergebnis = mysql_list_dbs ($Server);

$SQLString= "CREATE TABLE Artikel (ArtikelNr INTEGER,
Artikelname CHAR(30),
Artikelgruppe CHAR(30),
Preis DOUBLE,
Datum DATE)" ;
mysql_db_query("meinShop", $SQLString);
?>

Im folgenden Script wird überprüft, ob die Datenbank "meinShop" schon vorhanden ist.
Ist das nicht der Fall, wird sie in der Bedinung einer if-Struktur erzeugt und somit auch gleich überprüft, ob dieser Vorgang erfolgreich war.
if(mysql_create_db("meinShop", $Server)){
$DB_vorhanden=true;
}

Erst dann wird die Tabelle erzeugt mysql_db_query("meinShop", $SQLString).
Hier fehlt noch die Überprüfung, ob diese Tabelle schon vorhanden war.

<?php
$DB_vorhanden=false;
$Server = mysql_connect ("localhost", "pastor", "pixel");
$Ergebnis = mysql_list_dbs ($Server);


for($n=0; $n<mysql_num_rows($Ergebnis); $n++){
if(mysql_result($Ergebnis,$n)=="meinShop"){
$DB_vorhanden=true;
}

if(!$DB_vorhanden){
if(mysql_create_db("meinShop", $Server)){
$DB_vorhanden=true;
}
}
}


$SQLString= "CREATE TABLE Artikel (ArtikelNr INTEGER,
Artikelname CHAR(30),
Artikelgruppe CHAR(30),
Preis DOUBLE,
Datum DATE)" ;

if($DB_vorhanden){
if(mysql_db_query("meinShop", $SQLString)){
echo "Das hat geklappt, die Tabelle wurde erstellt!";
}
else{
echo "Das war wohl nix, die Tabelle wurde nicht erstellt .... Manno!";
}
}

?>

Definition der Felder im String

Primärschlüssel

$SQLString= "CREATE TABLE Artikel ( ArtikelNr INTEGER NOT NULL AUTO_INCREMENT,
Artikelname CHAR(30),
Artikelgruppe CHAR(30),
Preis DOUBLE,
Datum DATE,
PRIMARY KEY (ArtikelNr))" ;

Eine Tabelle braucht einen Primärschlüssel. Das ist in der Regel eine Spalte, mit durchlaufendenen Nummern (integer), über die die einzelnen Datensätze eindeutig zu identifizieren sind. Um keine Fehler zu produzieren, sind hier einige zusätzliche Definitionen nötig:
NOT NULL dieses Feld darf nicht leer bleiben
AUTO_INCREMENT hier wird automatisch eine fortlaufende Nummer erzeugt, Usereingaben sind nicht erforderlich.
PRIMARY KEY (ArtikelNr) am Ende wird das Feld als Primärschlüssel definiert

Datentypen

VARCHAR(M) Zeichenkette variable Länge 1 bis 255 Zeichen, die Längenangabe M bestimmt die maximale Anzahl der Zeichen.
CHAR(M) Zeichenkette feste Länge 1 bis 255 Zeichen, die maximal erlaubte Länge muss durch M gekennzeichnet werden. Kürzere Zeichenfolgen werden mit Leerzeichen aufgefüllt. Bei der Ausgabe werden diese Leerzeichen wieder entfernt.
TEXT Zeichenkette max. 65535 Zeichen Groß und Kleinschreibung werden nicht berücksichtigt
BLOB Zeichenkette max. 65535 Zeichen Groß und Kleinschreibung werden berücksichtigt
MEDIUMTEXT Zeichenkette max. 16777215 Zeichen Groß und Kleinschreibung werden nicht berücksichtigt
MEDIUMBLOB Zeichenkette max. 16777215 Zeichen Groß und Kleinschreibung werden berücksichtigt
INT
INT(M)
Ganzzahl zwischen -2,147 Mrd und 2,147 Mrd. (M) optional UNSIGNED beschränkt auf positive Werte

SMALLINT
SMALLINT(M)

Ganzzahl zwischen -32768 und 32767 (M) optional durch UNSIGNED sind Werte von 0 bis 65535 möglich
TINYINT
TINYINT(M)
Ganzzahl zwischen -128 und 127 (M) optional durch UNSIGNED sind Werte von 0 bis 255 möglich
FLOAT Fließkommazahl von +/- 1,175494351E-38 bis +/- -3,402823466E+38 Fließkommazahl mit einfacher Genauigkeit (Beachte, dass man anstatt Komma einen Punkt setzt)
DOUBLE Fließkommazahl von +/- 2.2250738585072014E-308 bis +/- 1.7976931348623157E+308 Fließkommazahl mit doppelter Genauigkeit
DATE Feld zum Speichern eines Datums YYYY-MM_DD Datum zwischen 01.01.1000 und 31.12.9999 zulässige Monatszahl und Tageszahl wird überprüft
DATETIME Speichern von Datum und Zeit YYYY-MM-DD hh:mm:ss Datum zwischen 01.01.1000 und 31.12.9999
TIMESTAMP
TIMESTAMP(M)
Aktueller Zeitstempel YYYYMMDDhhmmss reicht bis zum Jahr 2037 Parameter M kann folgende Werte bekommen: 14, 12, 8, 6
z.B. TIMESTAMP(12) YYMMDDhhmmss
bei TIMESTAMP(8) fehlt die Zeit

MySQL- Funktionen

mysql_affected_rows Liefert die Zahl der Datensätze, die von einer vorhergehenden Anweisung betroffen waren. Dabei kann es sich beispielsweise um die Zaahl von geänderten oder gelöschten Datensätzen handeln.
mysql_change_user Ändert den angemeldeten Benutzer. Als Argumente sind der Benutzername und das Passwort des neuen Benutzers zu übergeben.
mysql_close Schließt eine mit mysql_connect hergestellte Datenbankverbindung. Die Funktion liefert den Wert true, wenn die Operation erfolgreich ausgeführt wurde. Als Argument ist die von mysql_connect gelieferte Verbindungs-ID zu verwenden.
mysql_connect Stellt eine Datenbankverbindung her. Als Rückgabewert liefert die Funktion eine Verbindungs-ID, die in vielen anderen Funktionen benötigt wird.
mysql_create_db Neue Datenbank wird erzeugt.
mysql_data_seek Positioniert den Datensatzzeiger in der Ergebnistabelle. Die Funktion erwartet im zweiten Argument die Angabe der Zeilennummer. Im ersten Argument ist ein Verweis (eine ID) auf die Ergebnistabelle zu übergeben.
mysql_db_query Führt eine SQL-Anweisung aus. Dabei muss es sich nicht um eine SELECT-Anweisung handeln. Die Funktion dient auch der Manipulation von Daten und Tabellen. Sehr ähnlich arbeitet die funktion mysql_query. Letztere akzeptiert jedoch keinen Datenbanknamen als Argument.
mysql_drop_db Löscht eine Datenbank.
mysql_errno Liefert die Fehlernummer einer zuvor fehlgeschlagenen Operation. Die Fehlernummer lässt sich für die Fehlerbehandlung nutzen.
mysql_error Liefert die Fehlermeldung einer zuvor fehlgeschlagenen Operation.
mysql_fetch_array Schreibt eine Zeile aus der Ergebnistabelle in ein assoziatives Array. Die Bezeichnungen (Schlüssel) der Array-Elemente entsprechen den Bezeichnungen der Spalten.
mysql_fetch_field Liefert Informationen über eine Spalte als Objekt. Die einzelnen Eigenschaften, etwa Spaltenbezeichnung und Typ lassen sich dann über die Eigenschaften des Objekts ermitteln.
mysql_fetch_length Liefert ein Array mit der Längenangabe für jedes Feld in der Ergebnistabelle (bzw. Ergebniszeile).
mysql_fetch_object Liefert eine Ergebniszeile als Objekt. Sie haben so die Möglichkeit, auf die einzelnen Spalten (Felder) über Feldnamen zuzugreifen.
mysql_fetch_row Hier kann man sich anhand einer Ergebnis-Kennung (Ergebnis-Kennung) einen Datensatz in Form eines indizierten Arrays übergeben lassen. Im Erfolgsfall liefert diese Funktion den aktuellen Datensatz, sonst wird false zurückgegeben. Auf die einzelnen Zeilen greift man über die Array-Indizies zu. Eine ähnliche Funktion wie mysql_fetch_object
mysql_field_flags Liefert die Flags eines Feldes. Dabei handelt es sich um Angaben, die das Feld, neben Typ und Länge, genauer beschreiben. So kann die Funktion je nach Feld, Werte wie beispielsweise "primary_key", "auto_increment" oder "unsigned" ausgeben. Wenn für ein Feld mehrere Flags gesetzt sind, werden diese durch Leerzeichen getrennt in einem String aufgelistet.
mysql_field_name Liefert den Namen des Feldes.
mysql_field_len Liefert die Anzahl der Zeichen eines Feldes.
mysql_field_seek setzt in der Ergebnistabelle einen Zeiger auf ein bestimmtes Feld.
mysql_field_table Ermittelt die Tabellen, zu der ein bestimmtes Feld gehört und liefert den Tabellennamen.
mysql_field_type Ermittelt in der Ergebnistabelle den Typ eines bestimmten Feldes.
mysql_free_result Gibt den Speicher für die Ergebnistabelle frei. Diese Funktion wird normalerweise nicht benötigt, weil PHP den Speicher auch selbstständig freigibt, wenn dieser nicht mehr benötigt wird.
mysql_insert_id Ermittelt den Wert eines AutoIncrement-Feldes, wenn der betreffende Datensatz zurvor mit einer SQL-INSERT- Anweisung erzeugt wurde.
mysql_list_dbs Erzeugt eine Ergebnistabelle mit den Namen der vorhandenen Datenbanken. Die Funktion liefert, wie auch die Funktion mysql_query, einen Zeiger (auf eine ID) auf die betreffende Datenstruktur.
mysql_list_fields Erzeugt eine Ergebnistabelle mit den Namen der Felder einer Tabelle und liefert einen Zeiger auf die betreffende Datenstruktur.
mysql_list_tables erzeugt eine Ergebnistabelle mit den Namen der Tabellen einer Datenbank und liefert einen Zeiger auf die betreffende Datenstruktur.
mysql_num_fields Ermittelt die Zahl der Felder (Spalten) einer Ergebnistabelle. Diese Funktion verwenden Sie beispielsweise, um alle Felder in einer Schleife zu durchlaufen.
mysql_num_rows Ermittelt die Zahl der Zeilen (Datensätze) einer Ergebnistabelle. Diese Funktion lässt sich sehr gut in For-Schleifen einsetzen.
mysql_pconnect Stellt eine dauerhafte (persistente) Verbindung zum MySQL- Server her. Dauerhaft ist eine Verbindung, die nicht automatisch nach Abarbeitung des betreffenden Scripts beendet wird.
mysql_query Führt eine SQL-Anweisung aus und erzeugt für SELECT-Abfragen im Erfolgsfall eine Ergebnistabelle. Der Rückgabewert ist abhängig von der ausgeführten SQL-Anweisung. Bei SELECT-Abfragen erhalten Sie einen Zeiger auf die Ergebnistabelle. Die Funtion arbeitet ähnlich wie mysql_db_query.
mysql_result Liefert den Inhalt eines bestimmten Feldes eines Datensatzes der Ergebnistabelle. Diese Funktion verwenden Sie, um die Daten einer Abfrage auszugeben.
mysql_select_db Bestimmt die "aktive" Datenbank (Standarddatenbank). Die Standarddatenbank ist diejenige, auf die sich Operationen beziehen, die keine Datenbank benennen. (beispielsweise Operationen mit der Funktion mysql_query).
mysql_tablename Ermittelt den Namen einer Tabelle aus einer mit mysql_listtables erzeugten Ergebniszeile.

mysql_connect()

hier wird eine Verbindung zum mySQL-Server hergestellt, die Argumenten sind, Name des Host, Benutzername, Passwort. Im Prinzip könnte man auch auf die 3 Parameter verzichten. Man könnte auch ganz auf mysql_connect verzichten, wenn man beispielsweise die Funktion mysql_query nutzt, die auch versucht eine Verbindung herzustellen. Wenn sich die Datenbank auf einem anderen Server als das PHP Script befindet, muß man als erstes Argument entsprechende IP Nummer oder den Rechnernamen eingeben. Folgende Argumente sind auch möglich.

$Verbindung = mysql_connect("localhost"); offline
$Verbindung = mysql_connect("127.0.0.1"); IP Nummer
$Verbindung = mysql_connect("localhost:3306"); Hostname und Port
$Verbindung = mysql_connect("localhost", "Benutzername", "Passwort"); eindeutiges Script
$Verbindung = @mysql_connect("localhost", "Benutzername", "Passwort"); Unterdrückung der Fehlermeldung

Verbindungs-ID

Wenn die Funktion mysql_connect() eine Verbindung zur mySQL-Datenbank hergestellt hat, liefert sie einen Zeiger auf diese Verbindung und übergibt eine Verbindungs-ID. Diese Verbindungs-ID lässt sich in Funktionen wie mysql_dbs() einsetzen.

Fehlermeldung

Wenn die Verbindung nicht zustande kommt wird eine Fehlermeldung ausgegeben. Diese kann man unterdrücken mit folgender Schreibweise: @mysql_connect_("localhost", "Benutzername", "Passwort");
Hier ließe sich eine eigene Fehlermeldung einfügen z.B.:
<?php
if(@mysql_connect("localhost", "Benutzername", "Passwort")){
echo "Die SQL Verbindung hat geklappt";
}
else{
echo "Leider ist keine Verbindung zur Datenbank zustande gekommen.";
}
?>

Will man eine eigene Fehlermeldung erzeugen und dabei auch eine Verbindungs-ID einer Variable übergeben, ist folgende Schreibweise möglich. Die Funktion die() erzeugt die Fehlermeldung und bricht das Script ab.
$Verbindung = @mysql_connect("localhost", "Benutzername", "Passwort") or die("hier ist ein Fehler");

mysql_close

Normalerweise ist es nicht nötig eine Verbindung zu schließen, da das automatisch nach Abarbeitung eines Scriptes geschieht. Als Parameter ist die Verbindungs-ID möglich mysql_close($Verbindung), ansonsten wird die zuletzt geöffnete Verbindung geschlossen. Dauerhafte Verbindungen die mittels mysql_pconnect() erzeugt werden kann man hiermit nicht schließen.

mysql_pconnect()

Das automatische Beenden einer Verbindung nach Abarbeitung des Scriptes kann verhindert werden durch eine dauerhafte Verbindung mittels mysql_pconnect(). Dadurch hat man die Möglichkeit aus einem anderen Script heraus auf diese Verbindung zuzugreifen. Dauerhafte Verbindungen sind nicht möglich wenn PHP über CGI Schnittstelle genutzt wird, sondern nur über Apache oder ISAPI.


weiter / mysqlAnweisungen


Webdesign / PHP / mySQL / Dreamweaver MX Tipps
Copyright © Michael Albers
www.pastorpixel.de
www.pastorpixel.de PHP mySQL Tipps