Signatur
Beschreibung
mysqli_execute() ist ein direkter Alias der Funktion mysqli_stmt_execute() und führt ein zuvor mit mysqli_prepare() vorbereitetes SQL-Statement aus. Die Funktion arbeitet im prozeduralen Stil der MySQLi-Erweiterung.
Vor dem Aufruf sollten alle Platzhalter im Statement mit mysqli_stmt_bind_param() an entsprechende PHP-Variablen gebunden worden sein. Das Statement wird dann serverseitig mit den gebundenen Werten ausgeführt, was wiederholte Ausführungen desselben Statements mit unterschiedlichen Parametern effizient ermöglicht.
Da mysqli_execute() nur ein Alias ist, empfiehlt es sich in neuen Projekten, direkt mysqli_stmt_execute() zu verwenden, um die Abhängigkeit von einem Alias zu vermeiden und den Code klarer zu gestalten.
Prepared Statements schützen vor SQL-Injection-Angriffen, da Benutzereingaben niemals direkt in die SQL-Abfrage einfließen, sondern stets als separate Parameter behandelt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | mysqli_stmt | Ein mit mysqli_prepare() erzeugtes MySQLi-Statement-Objekt, das ausgeführt werden soll. |
Rückgabewert
true bei Erfolg zurück, false im Fehlerfall. Der Fehler kann mit mysqli_stmt_error() oder mysqli_error() abgefragt werden.Beispiele
Datensatz mit Prepared Statement einfügen
<?php
$link = mysqli_connect('localhost', 'benutzer', 'passwort', 'testdb');
if (!$link) {
die('Verbindungsfehler: ' . mysqli_connect_error());
}
$stmt = mysqli_prepare($link, 'INSERT INTO benutzer (name, email) VALUES (?, ?)');
mysqli_stmt_bind_param($stmt, 'ss', $name, $email);
$name = 'Max Mustermann';
$email = 'max@example.com';
if (mysqli_execute($stmt)) {
echo 'Datensatz erfolgreich eingefügt.';
} else {
echo 'Fehler: ' . mysqli_stmt_error($stmt);
}
mysqli_stmt_close($stmt);
mysqli_close($link);
Mehrfache Ausführung desselben Statements mit unterschiedlichen Werten
<?php
$link = mysqli_connect('localhost', 'benutzer', 'passwort', 'testdb');
$stmt = mysqli_prepare($link, 'INSERT INTO produkte (bezeichnung, preis) VALUES (?, ?)');
mysqli_stmt_bind_param($stmt, 'sd', $bezeichnung, $preis);
$datensaetze = [
['Apfel', 0.49],
['Banane', 0.29],
['Kirsche', 1.99],
];
foreach ($datensaetze as [$bezeichnung, $preis]) {
if (!mysqli_execute($stmt)) {
echo 'Fehler beim Einfügen: ' . mysqli_stmt_error($stmt) . PHP_EOL;
}
}
echo 'Alle Produkte eingefügt.';
mysqli_stmt_close($stmt);
mysqli_close($link);
// Wichtig · Fallstricke
Alias-Hinweis: mysqli_execute() ist lediglich ein Alias von mysqli_stmt_execute(). Für neue Projekte wird die direkte Verwendung von mysqli_stmt_execute() empfohlen, da Aliase in zukünftigen PHP-Versionen potenziell entfernt werden könnten.
Sicherheit: Prepared Statements bieten zuverlässigen Schutz vor SQL-Injection. Es ist dennoch wichtig, Eingaben serverseitig zu validieren, bevor sie als Parameter übergeben werden.
OOP-Alternative: Im objektorientierten Stil steht mysqli_stmt::execute() zur Verfügung, was in modernem PHP-Code bevorzugt werden sollte.