(PHP 5, PHP 7, PHP 8)
mysqli::real_connect -- mysqli_real_connect — Baut eine Verbindung zu einem MySQL-Server auf
Objektorientierter Stil
$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
,$flags
= 0Prozeduraler Stil
$mysql
,$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
,$flags
= 0Baut eine Verbindung zu einer MySQL-Datenbank auf.
Diese Funktion unterscheidet sich von der Funktion mysqli_connect():
mysqli_real_connect() benötigt ein gültiges Objekt, das mit der Funktion mysqli_init() erstellt werden muss.
Mit der Funktion mysqli_options() können verschiedene Optionen für die Verbindung eingestellt werden.
Es gibt den Parameter flags
.
mysql
Nur bei prozeduralem Aufruf: ein von mysqli_connect() oder mysqli_init() zurückgegebenes mysqli-Objekt.
hostname
Kann entweder ein Hostname oder eine IP-Adresse sein. Wenn diesem Parameter der Wert null
übergeben wird, wird der Wert von mysqli.default_host übernommen. Wenn möglich, werden Pipes anstelle des TCP/IP-Protokolls verwendet. Das TCP/IP-Protokoll wird verwendet, wenn ein Hostname und eine Portnummer zusammen angegeben werden, z. B. localhost:3308
.
username
Der MySQL-Benutzername oder null
, um den Benutzernamen aus der INI-Option mysqli.default_user zu übernehmen.
password
Das MySQL-Passwort oder null
, um den Benutzernamen aus der INI-Option mysqli.default_pw zu übernehmen.
database
Die Datenbank, die standardmäßig bei Abfragen verwendet werden soll, oder null
.
port
Die Portnummer, über die versucht wird, eine Verbindung mit dem MySQL-Server herzustellen, oder null
, um den Port aus der INI-Option mysqli.default_port zu übernehmen.
socket
Der Socket oder die benannte Pipe an, der/die verwendet werden soll, oder null
, um den Socket aus der INI-Option mysqli.default_socket zu übernehmen.
Hinweis:
Mit dem Parameter
socket
wird nicht explizit festgelegt, welche Art von Verbindung bei der Verbindung mit dem MySQL-Server verwendet werden soll. Wie die Verbindung zur MySQL-Datenbank hergestellt wird, wird durch den Parameterhostname
bestimmt.
flags
Mit dem Parameter flags
können verschiedene Verbindungsoptionen eingestellt werden:
Name | Beschreibung |
---|---|
MYSQLI_CLIENT_COMPRESS | Das Komprimierungsprotokoll verwenden |
MYSQLI_CLIENT_FOUND_ROWS | Die Anzahl der übereinstimmenden Zeilen zurückgeben, nicht die Anzahl der betroffenen Zeilen |
MYSQLI_CLIENT_IGNORE_SPACE | Leerzeichen nach Funktionsnamen zulassen; macht alle Funktionsnamen zu reservierten Wörtern |
MYSQLI_CLIENT_INTERACTIVE | interactive_timeout Sekunden der Inaktivität zulassen, bevor die Verbindung getrennt wird (anstelle von wait_timeout Sekunden) |
MYSQLI_CLIENT_SSL | SSL verwenden (Verschlüsselung) |
MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT | Wie MYSQLI_CLIENT_SSL , deaktiviert aber die Überprüfung des übergebenen SSL-Zertifikats; gilt nur für Installationen, die den MySQL Native Driver und MySQL 5.6 oder höher verwenden. |
Hinweis:
Aus Sicherheitsgründen wird das Flag
MULTI_STATEMENT
von PHP nicht unterstützt. Wenn mehrere Abfragen ausgeführt werden sollen, muss die Funktion mysqli_multi_query() verwendet werden.
If mysqli error reporting is enabled (MYSQLI_REPORT_ERROR
) and the requested operation fails, a warning is generated. If, in addition, the mode is set to MYSQLI_REPORT_STRICT
, a mysqli_sql_exception is thrown instead.
Version | Beschreibung |
---|---|
7.4.0 | Alle Parameter sind nun nullable (akzeptieren den null -Wert). |
Beispiel #1 mysqli::real_connect()-Beispiel
Objektorientierter Stil
<?php
$mysqli = mysqli_init();
if (!$mysqli) {
die('mysqli_init ist fehlgeschlagen');
}
if (!$mysqli->options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die('Setzen von MYSQLI_INIT_COMMAND ist fehlgeschlagen');
}
if (!$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('Setzen von MYSQLI_OPT_CONNECT_TIMEOUT ist fehlgeschlagen');
}
if (!$mysqli->real_connect('localhost', 'my_user', 'my_password', 'my_db')) {
die('Verbindungsfehler (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'Erfolg... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Objektorientierter Stil, wenn die Klasse mysqli erweitert wird
<?php
class foo_mysqli extends mysqli {
public function __construct($host, $user, $pass, $db) {
parent::__construct();
if (!parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die('Setzen von MYSQLI_INIT_COMMAND ist fehlgeschlagen');
}
if (!parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('Setzen von MYSQLI_OPT_CONNECT_TIMEOUT ist fehlgeschlagen');
}
if (!parent::real_connect($host, $user, $pass, $db)) {
die('Verbindungsfehler (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}
$db = new foo_mysqli('localhost', 'my_user', 'my_password', 'my_db');
echo 'Erfolg... ' . $db->host_info . "\n";
$db->close();
?>
Prozeduraler Stil
<?php
$link = mysqli_init();
if (!$link) {
die('mysqli_init ist fehlgeschlagen');
}
if (!mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die('Setzen von MYSQLI_INIT_COMMAND ist fehlgeschlagen');
}
if (!mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('Setzen von MYSQLI_OPT_CONNECT_TIMEOUT ist fehlgeschlagen');
}
if (!mysqli_real_connect($link, 'localhost', 'my_user', 'my_password', 'my_db')) {
die('Verbindungsfehler (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'Erfolg... ' . mysqli_get_host_info($link) . "\n";
mysqli_close($link);
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
Erfolg... MySQL host info: localhost via TCP/IP
Hinweis:
MySQLnd nimmt immer den Standardzeichensatz des Servers an. Dieser Zeichensatz wird während des Aufbaus der Verbindung bzw. der Authentifizierung übermittelt und danach von MySQLnd verwendet.
Libmysqlclient verwendet als Standardzeichensatz den, der in der Datei my.cnf angegeben oder durch einen Aufruf von mysqli_options() vor dem Aufruf von mysqli_real_connect() aber nach mysqli_init() gesetzt wurde.