Signatur
Beschreibung
mysqli_embedded_server_start() dient dazu, den eingebetteten MySQL-Server zu initialisieren und zu starten, der direkt in den PHP-Prozess eingebunden ist. Dies ermöglicht es, MySQL-Funktionalität vollständig ohne einen externen Datenbankserver-Prozess zu nutzen — die Datenbank läuft dabei in derselben Prozessumgebung wie PHP selbst.
Der eingebettete Server (libmysqld) eignet sich vor allem für Szenarien, in denen keine separate MySQL-Server-Instanz verfügbar oder gewünscht ist, z. B. in Desktop-Anwendungen, eingebetteten Systemen oder speziellen Testumgebungen. PHP muss dabei mit der Option --with-mysqli=embedded bzw. gegen libmysqld kompiliert worden sein.
Über den Parameter $arguments lassen sich Startparameter übergeben, die dem eingebetteten Server mitgeteilt werden (ähnlich den Kommandozeilenargumenten von mysqld). Der Parameter $groups bestimmt, welche Konfigurationsgruppen aus der my.cnf-Datei gelesen werden sollen.
Hinweis: Diese Funktion ist veraltet und wurde in PHP 7.4 als deprecated markiert. Die Unterstützung für den eingebetteten MySQL-Server wurde in neueren PHP- und MySQL-Versionen entfernt. Für aktuelle Projekte sollten reguläre MySQL/MariaDB-Verbindungen oder SQLite als Alternative genutzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $start Pflicht | bool | Gibt an, ob der eingebettete Server gestartet werden soll (true) oder ob lediglich eine Initialisierung ohne Start erfolgen soll (false). |
|
| $arguments Pflicht | array | Ein Array mit Startargumenten für den eingebetteten MySQL-Server. Das erste Element ist typischerweise der Name des Programms (z. B. 'mysql'), gefolgt von Optionen wie '--datadir=/pfad/zu/daten'. |
|
| $groups Pflicht | array | Ein Array mit den Namen der Konfigurationsgruppen aus der my.cnf-Datei, die der eingebettete Server einlesen soll, z. B. ['server', 'embedded']. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler bei der Initialisierung oder beim Start des eingebetteten Servers.Beispiele
Eingebetteten MySQL-Server starten und eine Abfrage ausführen
<?php
// Eingebetteten Server initialisieren und starten
$args = ['mysql', '--datadir=/var/lib/mysql_embedded', '--skip-networking'];
$groups = ['server', 'embedded'];
if (!mysqli_embedded_server_start(true, $args, $groups)) {
die('Fehler: Eingebetteter MySQL-Server konnte nicht gestartet werden.');
}
// Verbindung über die eingebettete Instanz herstellen
$mysqli = new mysqli();
if ($mysqli->connect_error) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
$result = $mysqli->query('SELECT VERSION() AS version');
if ($row = $result->fetch_assoc()) {
echo 'MySQL-Version: ' . $row['version'] . PHP_EOL;
}
$mysqli->close();
// Eingebetteten Server wieder stoppen
mysqli_embedded_server_end();
?>
Nur Initialisierung ohne sofortigen Start
<?php
// Server initialisieren, aber noch nicht starten
$args = ['mysql', '--datadir=/tmp/mydb'];
$groups = ['embedded'];
$initialized = mysqli_embedded_server_start(false, $args, $groups);
if ($initialized) {
echo 'Eingebetteter MySQL-Server wurde erfolgreich initialisiert.' . PHP_EOL;
} else {
echo 'Initialisierung fehlgeschlagen.' . PHP_EOL;
}
?>
// Wichtig · Fallstricke
Deprecation: Diese Funktion ist seit PHP 7.4 als veraltet (deprecated) markiert und sollte in neuen Projekten nicht mehr verwendet werden. Die libmysqld-Bibliothek wurde zudem mit MySQL 8.0 vollständig entfernt.
Kompilierungsvoraussetzung: PHP muss explizit mit Unterstützung für den eingebetteten MySQL-Server kompiliert worden sein (--with-mysqli=embedded). In den meisten Standard-Distributionen ist dies nicht der Fall.
Alternative: Für eingebettete Datenbanken empfiehlt sich der Einsatz von SQLite über die PDO_SQLITE- oder SQLite3-Erweiterung, die weitaus besser unterstützt wird und keine speziellen Kompilierungsoptionen benötigt.