PHP und MySQL
Die Datenbank MySQL hat sich im Laufe der Zeit zu der Datenbank für Webanwendungen schlechthin entwickelt. Daneben hat sich die Skriptsprache PHP als Schnittstelle zur MySQL-Datenbank im Internet etabliert. Das schnelle Verständnis, die vielen Funktionen und die einfache Umsetzbarkeit der MySQL-PHP-Komponente ermöglicht einen schnellen und effektiven Zugriff auf die Datenbank.Installation der MySQL-Bibliothek
Eine separate Installation der MySQL-Komponente ist nicht notwendig. Bei einer Installation von PHP wird sie automatisch mitgeliefert. Weiterhin ist sie in der Konfigurationsdatei von PHP bereits aktiv, so dass sie vor der Nutzung auch nicht mehr freigeschaltet werden muss.Standard-Konfigurationsparameter für MySQL
In der php.ini - Datei stehen verschiedene Parameter zur Verfügung, mit denen der Zugriff auf die Datenbank konfiguriert werden kann. Falls in einem Skript keine eigenen Zugriffsdaten definiert sind, werden automatisch die Informationen aus der php.ini hergenommen.Die folgende Tabelle zeigt die Parameter, die angegebenen Standardwerte und Anmerkungen, die man beachten sollte:
Parameter | Standardwert | Bedeutung |
---|---|---|
mysql.allow_persistent | On | Dauerhafte Verbindungen zum MySQL-Server (On = Erlaubt; Off=Nicht erlaubt) |
mysql.max_persistent | -1 | Maximale Anzahl dauerhafter Verbindungen zum MySQL-Server (-1 = keine Grenze) |
mysql.max_links | -1 | Maximale Anzahl von Verbindungen zum MySQL-Server (-1 = keine Grenze) |
mysql.default_port | keine Angabe | Portnummer für Netzwerkzugriff auf MySQL-Server (keine Angabe = Standardport) |
mysql.default_socket | keine Angabe | Angabe des Sockets für Zugriff (keine Angabe = MySQL-eigenes Socket) |
mysql.default_host | keine Angabe | Standard-Hostname für den MySQL-Server |
mysql.default_user | keine Angabe | Standard-User für Zugriff auf MySQL-Server |
mysql.default_password | keine Angabe | Standard-Paßwort für Zugriff auf MySQL-Server |
mysql.connect_timeout | 60 | Maximale Dauer für Verbindungsversuche zum MySQL_Server (Angabe in Sekunden) |
mysql.trace_mode | Off | Tabellen- und Index-Scans und SQL-Fehler werden angezeigt (On = Erlaubt; Off=Nicht erlaubt) |
Verbindung zu einem MySQL-Server
Die Verbindung zum MySQL-Server kann mitmysqli_connect
aufgebaut werden. Außerdem kann Sie mit mysqli_close
geschlossen werden, was allerdings meist nicht notwendig ist, da der Server sie automatisch nach einer Weile schließt wenn sie nicht mehr verwendet wird.
Funktion mysqli_connect()
Diese Funktion stellt eine Verbindung zu einem MySQL-Server her.Mögliche Parameter:
Hostname oder IP-Adresse des MySQL-Servers, MySQL-User, MySQL-Paßwort., Datenbankname, Datenbankserver-Port, Socket
Die Funktion muss nur einmal in einem Skript aufgerufen werden. Eine über diese Funktion aufgebaute Verbindung wird bei Beendigung des PHP-Skriptes automatisch wieder geschlossen. Die Funktion arbeitet mit einem Rückgabewert, so dass überprüft werden kann, ob tatsächlich eine Verbindung zum Datenbankserver aufgebaut werden konnte oder nicht. Der Rückgabewert sollte unbedingt genutzt werden, da dieser die Verbindungskennung enthält, auf die die folgenden Funktionen der Bibliothek zugreifen.
Vor den Hostnamen kann ein "p:" (für "persistant") geschrieben werden. Eine Verbindung, die mit "p:" aufgebaut wurde, bleibt im Gegensatz zur einfachen Variante auch nach Beendigung des Skriptes offen und für andere Skripte nutzbar. Der Vorteil besteht darin, dass beim nächsten Skriptaufruf die Verbindung bereits besteht und nicht extra aufgebaut werden muss (= schneller).
Funktion mysqli_close()
Damit wird die Verbindung zu einem Datenbankserver geschlossen.Notwendige Parameter:
Kennung der vorher aufgebauten Verbindung
Wenn keine Verbindungskennung angegeben wird, wird die letzte geöffnete Verbindung zum Datenbankserver geschlossen. Die Verwendung der Funktion ist nicht unbedingt notwendig, da sie persistente Verbindungen nicht schließen kann und
mysqli_connect
-Verbindung sowieso bei Beendigung des Skriptes beendet werden.
Funktion mysqli_ping()
Die Funktion überprüft, ob die vorher aufgebaute Verbindung zum Datenbankserver noch besteht.Notwendige Parameter:
Kennung der vorher aufgebauten Verbindung
Wenn keine Verbindung mehr zum Datenbankserver besteht, wird automatisch eine neue Verbindung aufgebaut.
SQL-Statements aus einer Datenbank
Funktion mysqli_select_db()
Diese Funktion ermöglicht die Auswahl der Datenbank, mit der das PHP-Skript arbeiten soll.Notwendige Parameter:
Name der Datenbank, Verbindungskennung, die mit
mysqli_connect()
angelegt wurdeFunktion mysqli_query()
Mit dieser Funktion wird eine SQL-Abfrage an den Datenbankserver geschickt.Notwendige Parameter:
Kennung der Mysql-Verbindung
SQL-Abfrage in Anführungszeichen
Wenn das SQL-Statement dynamisch generiert wurde, kann anstatt der statischen SQL-Abfrage auch eine Variable (= Rückgabewert der dynamisch generierten SQL-Abfrage) als Parameter angegeben werden. Der Einsatz dieser Funktion ist nur im Zusammenhang mit
mysqli_select_db()
sinnvoll. Die Funktion kann mehrmals im PHP-Skript angewandt werden. Dabei wird grundsätzlich die mit mysqli_select_db()
ausgewählte Datenbank verwendet.
Verarbeitung von SQL-Statements
Funktion mysqli_real_escape_string()
Mit dieser Funktion werden Sonderzeichen in einem Ausdruck, der für ein SQL-Statement verwendet werden soll, maskiert.Notwendige Parameter:
Kennung der Mysql-Verbindung
Ausdruck zum Maskieren, Verbindungskennung
Eine Verbindungskennung muss zwingend mit angegeben werden, sonst wirkt die Funktion nicht. Die Funktion beugt u.a. auch dem SQL-Injection-Problem vor. Die Funktion fügt den Sonderzeichen x00, n, r, , ', " und x1a ein weiteres ""-Zeichen hinzu.
Funktion mysqli_fetch_row()
Diese Funktion liefert das Ergebnis einer SELECT-Abfrage als sog. "indiziertes Array" zurück. Das heißt, dass jede Zeile eines ermittelten Datensatzes als Array-Elemente zur Verfügung stehen.Notwendige Parameter:
Rückgabewert(Kennung) der mit einer der query-Funktionen abgesetzten SQL-Statements.
Der Rückgabewert dieser Funktion ist automatisch ein Array. Normalerweise wird
mysqli_fetch_row
in einer while-Schleife so lange angewandt, bis keine Datensätze mehr zur Verfügung stehen.Wichtig: Für die Funktion
mysqli_fetch_row()
gibt es mehrere Alternativen, die alle den gleichen Zweck haben und über deren Einsatz der Programmierer nach seinem eigenen Ermessen entscheiden kann.Die folgende Tabelle zeigt die Alternativen und deren Bedeutung auf.
Funktion | Bedeutung |
---|---|
mysqli_fetch_array | Datensatz wird als assoziatives Array, als numerisches Array oder beides zurückgegeben |
mysqli_fetch_assoc | Datensatz wird als assoziatives Array zurückgegeben |
mysqli_fetch_field | Datensatz wird als Objekt mit Feldinformationen aus einem Abfrageergebnis zurückgegeben |
mysqli_fetch_lengths | gibt die Länge jeden Feldes in einem Abfrageergebnis zurück |
mysqli_fetch_object | Jede Zeile eines Datensatzes steht als Objekt zur Verfügung |
Funktion mysqli_num_rows()
Diese Funktion gibt die Anzahl der Datensätze zurück, die mit der dazugehörigen SQL-Abfrage ermittelt wurde.Notwendige Parameter:
Rückgabewert(Kennung) der mit einer der query-Funktionen abgesetzten SQL-Statements.
Die Funktion
mysqli_num_rows()
gilt nur bei SELECT-Abfragen.
Funktion mysqli_affected_rows()
Diese Funktion gibt die Anzahl der Datensätze zurück, die mit der dazugehörigen SQL-Abfrage ermittelt wurde.Notwendige Parameter:
Rückgabewert(Kennung) der mit einer der query-Funktionen abgesetzten SQL-Statements.
Diese Funktion kann nur bei SQL-Befehlen verwendet werden, die die Datensätze in einer Datenbank tatsächlich verändern (INSERT, DELETE, UPDATE). Bei einem SQL-UPDATE-Statement liefert die Funktion nur die Anzahl der Datensätze zurück, bei denen der Befehl auch tatsächlich ausgeführt wurde. Entspricht der neue Wert dem alten Wert in der Datenbank, wird das UPDATE-Statement nicht durchgeführt!
Behandlung von Fehlern
Funktion mysqli_errno()
Diese Funktion liefert die Fehlernummer einer zuvor ausgeführten MySQL-Operation zurück.Notwendige Parameter:
Kennung/Rückgabewert der vorher ausgeführten MySQL-Funktion
Wenn kein Fehler aufgetreten ist, liefert die Funktion den Wert -1 zurück. Die Funktion greift auf die letzte zuvor ausgeführte MySQL-Operation zurück, wenn kein Rückgabewert angegeben wurde.
Funktion mysqli_error()
Diese Funktion liefert den Fehlertext einer zuvor ausgeführten MySQL-Operation zurück.Notwendige Parameter:
Kennung/Rückgabewert der vorher ausgeführten MySQL-Funktion
Wenn kein Fehler aufgetreten ist, liefert die Funktion den Wert -1 zurück. Die Funktion greift auf die letzte zuvor ausgeführte MySQL-Operation zurück, wenn kein Rückgabewert angegeben wurde. Im Gegensatz zu
mysqli_errno()
wird hier ein Fehlertext und keine Nummer ausgegeben. Wichtig: Die Fehlernummern bzw. Fehlertexte, auf die die beiden Funktionen zugreifen, entsprechen den Standardfehlercodes, die der MySQL-Server mitliefert.
Praktisches Beispiel in einem PHP-Skript
<?
// Festlegung der Verbindungsparameter
$db_host = "localhost";
$db_name = "test";
$db_user = "root";
$db_passwort = "waltraud";
// Aufbau der Verbindung und Fehlerüberprüfung
$connection = @mysqli_connect($db_host,$db_user,$db_passwort);
if(!connection)
{
die "Verbindungsaufbau nicht möglich, da:". mysql_error();
}
// Auswahl der benötigten Datenbank
@mysqli_select_db($db_name);
// Zugriff auf Suchbegriff und Absetzen des MySQL-Statements
$result = @mysqli_query('SELECT titel, medium FROM film '.
'WHERE title = "Pulp Fiction"');
// Ermittlung und Anzeige der Anzahl der Datensätze
$count = mysqli_num_rows($result);
print("Es wurden $count Filme in der Datenbank gefunden");
// Verarbeitung des MySQL-Statements
while($row = @mysqli_fetch_row($result))
{
print("
<p>Titel: $row[0]</p>
<p>Medium: $row[1]</p>
");
}
// Schließen der aktuellen Verbindung zum Datenbankserver
$close = @mysqli_close($connection);
if(!$close)
{
echo "Verbindung zum Datenbankserver wurde geschlossen";
}
?>
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ Verkettete Methodenaufrufe
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project