Datenbankverbindungen

Der MySQL-Server unterstützt die Verwendung verschiedener Transportschichten für Verbindungen. Verbindungen verwenden TCP/IP, Unix-Domain-Sockets oder Windows Named Pipes.

Der Hostname localhost hat eine besondere Bedeutung. Er ist an die Verwendung von Unix-Domain-Sockets gebunden. Um eine TCP/IP-Verbindung zum Localhost zu öffnen, muss 127.0.0.1 anstelle des Hostnamens localhost verwendet werden.

Beispiel #1 Die besondere Bedeutung von localhost

<?php

$mysqli 
= new mysqli("localhost""user""password""database");

echo 
$mysqli->host_info "\n";

$mysqli = new mysqli("127.0.0.1""user""password""database"3306);

echo 
$mysqli->host_info "\n";

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Localhost via UNIX socket
127.0.0.1 via TCP/IP

Standardwerte für Verbindungsparameter

Je nach verwendeter Verbindungsfunktion können verschiedene Parameter weggelassen werden. Wenn ein Parameter nicht angegeben wird, versucht die Erweiterung, die Standardwerte zu verwenden, die in der PHP-Konfigurationsdatei festgelegt sind.

Beispiel #2 Standardwerte festlegen

mysqli.default_host=192.168.2.27
mysqli.default_user=root
mysqli.default_pw=""
mysqli.default_port=3306
mysqli.default_socket=/tmp/mysql.sock

Die entsprechenden Parameterwerte werden dann an die Client-Bibliothek übergeben, die von der Erweiterung verwendet wird. Wenn die Client-Bibliothek leere oder nicht gesetzte Parameter findet, kann sie die Standardwerte der Bibliothek verwenden.

Standardwerte der integrierten Verbindungsbibliothek

Wenn der Wert von host nicht definiert oder leer ist, verwendet die Client-Bibliothek standardmäßig eine Unix-Socket-Verbindung zu localhost. Wenn der Socket undefiniert oder leer ist und eine Unix-Socket-Verbindung angefordert wird, dann wird versucht, eine Verbindung zum Standardsocket /tmp/mysql.sock aufzubauen.

Auf Windows-Systemen wird der Hostname . von der Client-Bibliothek als Versuch interpretiert, eine auf einer Windows Namend Pipe basierende Verbindung zu öffnen. In diesem Fall wird der Socket-Parameter als Name der Pipe interpretiert. Wird er nicht angegeben oder ist er leer, dann wird der Socket (Name der Pipe) standardmäßig auf \\.\pipe\MySQL gesetzt.

Wenn eine Verbindung weder basierend auf einen Unix-Domänen-Socket noch auf eine Windows Named Pipe aufgebaut werden soll und der Parameterwert für den Port nicht gesetzt ist, verwendet die Bibliothek standardmäßig den Port 3306.

Die mysqlnd-Bibliothek und die MySQL-Client-Bibliothek (libmysqlclient) implementieren dieselbe Logik zur Bestimmung der Standardwerte.

Optionen für die Verbindung

Die Verbindungsoptionen sind verfügbar, um z. B. Initialisierungsbefehle zu setzen, die beim Aufbau der Verbindung ausgeführt werden, oder um die Verwendung eines bestimmten Zeichensatzes anzugeben. Die Verbindungsoptionen müssen gesetzt werden, bevor eine Netzwerkverbindung aufgebaut wird.

Um eine Verbindungsoption zu setzen, muss der Verbindungsvorgang in drei Schritten durchgeführt werden: erstellen eines Verbindungs-Handles mit mysqli_init() oder mysqli::__construct(), setzen der gewünschten Optionen mit mysqli::options() und Aufbau der Netzwerkverbindung mit mysqli::real_connect().

Pooling von Verbindungen

Die mysqli-Erweiterung unterstützt persistente Datenbankverbindungen, die eine spezielle Art von gepoolten Verbindungen sind. Standardmäßig wird jede Datenbankverbindung, die von einem Skript geöffnet wird, entweder explizit durch den Benutzer während der Laufzeit geschlossen oder am Ende des Skripts automatisch freigegeben. Eine persistente Verbindung wird nicht geschlossen. Stattdessen wird sie in einen Pool gelegt, um später wiederverwendet zu werden, wenn eine Verbindung zum selben Server mit denselben Benutzernamen, Passwort, Socket, Port und Standarddatenbank geöffnet wird. Die Wiederverwendung spart Verbindungs-Overhead.

Jeder PHP-Prozess verwendet seinen eigenen mysqli-Verbindungspool. Abhängig vom Einsatzmodell des Webservers kann ein PHP-Prozess eine oder mehrere Anfragen bedienen. Daher kann eine in einem Pool gehaltene Verbindung von einem oder mehreren Skripten nacheinander verwendet werden.

Persistente Verbindung

Wenn im Verbindungspool für eine bestimmte Kombination von Host, Benutzername, Passwort, Socket, Port und Standarddatenbank keine unbenutzte persistente Verbindung gefunden wird, öffnet mysqli eine neue Verbindung. Die Verwendung persistenter Verbindungen kann mit der PHP-Direktive mysqli.allow_persistent aktiviert und deaktiviert werden. Die Gesamtzahl der von einem Skript geöffneten Verbindungen kann mit mysqli.max_links begrenzt werden. Die maximale Anzahl von persistenten Verbindungen pro PHP-Prozess kann mit mysqli.max_persistent begrenzt werden. Bitte beachten Sie, dass der Webserver viele PHP-Prozesse erzeugen kann.

Eine häufige Kritik an persistenten Verbindungen ist, dass ihr Zustand vor der Wiederverwendung nicht zurückgesetzt wird. Zum Beispiel werden offene und nicht abgeschlossene Transaktionen nicht nicht automatisch zurückgesetzt. Aber auch Berechtigungsänderungen, die in der Zeit zwischen der Aufnahme der Verbindung in den Pool und ihrer Wiederverwendung vorgenommen wurden, werden nicht berücksichtigt. Dies kann als unerwünschter Nebeneffekt angesehen werden. Andererseits kann der Name persistent als Zusage verstanden werden, dass der Zustand erhalten bleibt.

Die mysqli-Erweiterung unterstützt beide Arten einer persistenten Verbindung: den persistenten Zustand und den vor der Wiederverwendung zurückgesetzten Zustand. Die Voreinstellung ist Zurücksetzen. Bevor eine persistente Verbindung wiederverwendet wird, ruft die mysqli-Erweiterung implizit mysqli::change_user() auf, um den Zustand zurückzusetzen. Die persistente Verbindung erscheint dem Benutzer so, als ob sie gerade geöffnet worden wäre. Es sind keine Spuren von früheren Verwendungen sichtbar.

Der Aufruf von mysqli::change_user() ist eine aufwändige Operation. Um die beste Leistung zu erzielen, sollten Benutzer die Erweiterung mit dem Kompilierungsflag MYSQLI_NO_CHANGE_USER_ON_PCONNECT neu kompilieren.

Es ist dem Benutzer überlassen, zwischen sicherem Verhalten und bester Leistung zu wählen. Beides sind berechtigte Optimierungsziele. Um die Benutzung zu erleichtern, wurde das sichere Verhalten auf Kosten der maximalen Leistung als Standard festgelegt.

Siehe auch

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Definition von Stored Procedures - eine Einführung

Stored Procedures sind vordefinierte SQL-Codeblöcke, die in einer Datenbank gespeichert sind und bei Bedarf aufgerufen werden können. ...

Bernie

Autor : ebiz-consult GmbH & Co. KG
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Berechnungen durchführen

Hallo liebe Forenmitglieder, meine erste frage ist zum Aufbau meiner kleinen Berechnungswebseite, nichts kommerzielles, soll nur eine Anwendung f ...

Geschrieben von matze511 am 21.04.2024 21:42:37
Forum: PHP Developer Forum
Professioneller Webentwickler & Webdesigner

Of course, here is the translation: Hello, Thank you for your interest in the long-term project. Your extensive skills and experience in web dev ...

Geschrieben von Athelstan am 15.04.2024 09:25:39
Forum: Jobgesuche
Wir stellen unsere SEO-Agentur vor

Hallo In der heutigen digitalen Welt war es für Unternehmen noch nie so einfach, ihre Reichweite weltweit zu vergrößern. Wenn Sie außerhalb I ...

Geschrieben von thomasmuller am 14.04.2024 07:18:33
Forum: User stellen sich vor
Spielplan für 4 Gruppen zu je 6 Teams auf 2 Feldern

Hallöchen zusammen, ich versuche derzeit unseren Excel-Spielplan in PHP zu überführen. Eigentlich bin ich auch shon fertig - wenn da nicht dies ...

Geschrieben von derH0st am 11.04.2024 15:58:37
Forum: PHP Developer Forum