Start · Sprachen · PHP · Referenz · mysqli_execute_query

mysqli_execute_query

Funktion

Bereitet eine SQL-Anweisung vor, bindet die Parameter und führt sie in einem einzigen Schritt aus.

seit PHP 8.2.0 Kategorie: db

Signatur

mysqli_execute_query(mysqli $mysql, string $query, array|null $params = null): mysqli_result|bool

Beschreibung

mysqli_execute_query() kombiniert die drei Schritte mysqli_prepare(), mysqli_bind_param() und mysqli_execute() in einem einzigen Funktionsaufruf. Damit lassen sich parametrisierte Abfragen deutlich kompakter schreiben, ohne auf die Sicherheit von Prepared Statements verzichten zu müssen.

Die Funktion akzeptiert ein optionales Array von Parameterwerten, die intern automatisch gebunden werden. PHP ermittelt den Typ jedes Parameters selbst – Strings werden als Strings, Integers als Integer behandelt. Platzhalter im SQL werden mit ? angegeben, genau wie bei klassischen Prepared Statements.

Bei SELECT-Abfragen gibt die Funktion ein mysqli_result-Objekt zurück, das sofort iteriert werden kann. Bei anderen Anweisungstypen (z. B. INSERT, UPDATE, DELETE) wird true bei Erfolg oder false bei einem Fehler zurückgegeben.

Die Funktion ist besonders nützlich, wenn eine Abfrage nur einmal ausgeführt werden soll und kein explizites Statement-Handle benötigt wird. Für mehrfach ausgeführte Abfragen ist das manuelle Prepare/Execute-Muster performanter, da das Statement nur einmal kompiliert wird.

Parameter

Name Typ Default Beschreibung
$mysql Pflicht mysqli Die aktive Datenbankverbindung, die mit mysqli_connect() oder new mysqli() erstellt wurde.
$query Pflicht string Die auszuführende SQL-Anweisung mit ?-Platzhaltern für Parameter. Benutzerdaten dürfen niemals direkt in den Query-String eingebettet werden.
$params array|null null Ein optionales, numerisch indiziertes Array mit den Werten, die an die ?-Platzhalter gebunden werden sollen. Die Anzahl der Array-Elemente muss der Anzahl der Platzhalter entsprechen.

Rückgabewert

Typ
mysqli_result|bool
Beschreibung
Gibt bei SELECT-, SHOW-, DESCRIBE- und EXPLAIN-Anweisungen ein mysqli_result-Objekt zurück. Bei allen anderen Anweisungstypen wird true bei Erfolg und false bei einem Fehler zurückgegeben.

Beispiele

Benutzer anhand der ID abrufen

<?php
$mysqli = new mysqli('localhost', 'user', 'secret', 'mydb');

$userId = 42;
$result = mysqli_execute_query(
    $mysqli,
    'SELECT id, name, email FROM users WHERE id = ?',
    [$userId]
);

if ($row = $result->fetch_assoc()) {
    echo "Name: " . $row['name'] . "\n";
    echo "E-Mail: " . $row['email'] . "\n";
} else {
    echo "Kein Benutzer gefunden.\n";
}
Name: Max Mustermann E-Mail: max@example.com

Neuen Datensatz einfügen

<?php
$mysqli = new mysqli('localhost', 'user', 'secret', 'mydb');

$name  = 'Erika Musterfrau';
$email = 'erika@example.com';

$success = mysqli_execute_query(
    $mysqli,
    'INSERT INTO users (name, email) VALUES (?, ?)',
    [$name, $email]
);

if ($success) {
    echo "Datensatz eingefügt. Neue ID: " . $mysqli->insert_id . "\n";
} else {
    echo "Fehler: " . $mysqli->error . "\n";
}
Datensatz eingefügt. Neue ID: 43

Mehrere Zeilen abrufen und iterieren

<?php
$mysqli = new mysqli('localhost', 'user', 'secret', 'mydb');

$minAge = 18;
$result = mysqli_execute_query(
    $mysqli,
    'SELECT name, age FROM users WHERE age >= ? ORDER BY age',
    [$minAge]
);

foreach ($result as $row) {
    printf("%-20s %d\n", $row['name'], $row['age']);
}
Max Mustermann 25 Erika Musterfrau 31

// Wichtig · Fallstricke

Sicherheit: Obwohl mysqli_execute_query() Prepared Statements intern verwendet und damit SQL-Injection verhindert, müssen Ausgaben von Datenbankwerten im HTML-Kontext weiterhin mit htmlspecialchars() gesichert werden, um XSS-Angriffe zu verhindern.

PHP-Version: Diese Funktion ist erst ab PHP 8.2.0 verfügbar. Für ältere PHP-Versionen muss der klassische Weg über mysqli_prepare(), bind_param() und execute() verwendet werden.

Performance: Wenn dieselbe Abfrage mehrfach mit unterschiedlichen Parametern ausgeführt werden soll, ist die manuelle Variante mit mysqli_prepare() vorzuziehen, da das Statement nur einmal kompiliert wird.

Fehlerbehandlung: Im Fehlerfall wird false zurückgegeben. Bei aktiviertem MYSQLI_REPORT_ERROR-Modus (empfohlen) wird stattdessen eine mysqli_sql_exception geworfen.