Start · Sprachen · PHP · Referenz · mysqli_embedded_server_start

mysqli_embedded_server_start

Funktion

Initialisiert und startet den eingebetteten MySQL-Server (libmysqld) innerhalb des PHP-Prozesses.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_embedded_server_start(bool $start, array $arguments, array $groups): bool

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

Typ
bool
Beschreibung
Gibt 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();
?>
MySQL-Version: 5.7.x-embedded

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;
}
?>
Eingebetteter MySQL-Server wurde erfolgreich initialisiert.

// 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.