PHP und Datenbanken Verbindung zum Datenbankserver

Werbung
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>
Herunterladen