Signatur
Beschreibung
mysqli_stmt_error() liefert die lesbare Fehlermeldung des zuletzt aufgetretenen Fehlers, der mit dem übergebenen vorbereiteten Statement (mysqli_stmt) in Verbindung steht. Diese Meldung wird direkt vom MySQL-Server geliefert und ist in der Sprache des Servers verfasst (in der Regel Englisch).
Die Funktion wird typischerweise zusammen mit mysqli_stmt_errno() genutzt, um nach dem Ausführen von mysqli_stmt_execute(), mysqli_stmt_bind_param() oder ähnlichen Statement-Operationen gezielt auf Fehler reagieren zu können. Gibt es keinen Fehler, wird eine leere Zeichenkette zurückgegeben.
In objektorientierter Schreibweise steht die Eigenschaft $stmt->error als Äquivalent zur Verfügung. Für professionelle Anwendungen empfiehlt sich der Einsatz von Exceptions mittels mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT), sodass Fehler nicht manuell abgefragt werden müssen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | mysqli_stmt | Das vorbereitete Statement-Objekt, dessen letzter Fehler abgefragt werden soll. Wird durch mysqli_prepare() oder $mysqli->prepare() erzeugt. |
Rückgabewert
'') zurückgegeben.Beispiele
Fehlerbehandlung nach fehlgeschlagenem Execute
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
$stmt = $mysqli->prepare('SELECT * FROM nicht_vorhandene_tabelle WHERE id = ?');
if ($stmt === false) {
echo 'Prepare-Fehler: ' . $mysqli->error;
} else {
$id = 1;
$stmt->bind_param('i', $id);
if (!$stmt->execute()) {
// Fehlermeldung über prozedurale Funktion abrufen
$fehler = mysqli_stmt_error($stmt);
echo 'Fehler beim Ausführen: ' . $fehler;
} else {
echo 'Abfrage erfolgreich ausgeführt.';
}
$stmt->close();
}
$mysqli->close();
Prozedurale Verwendung mit Fehlercode und -meldung
<?php
$link = mysqli_connect('localhost', 'user', 'password', 'testdb');
$stmt = mysqli_prepare($link, 'INSERT INTO users (id, name) VALUES (?, ?)');
if ($stmt) {
$id = 1;
$name = 'Max';
mysqli_stmt_bind_param($stmt, 'is', $id, $name);
if (!mysqli_stmt_execute($stmt)) {
$errno = mysqli_stmt_errno($stmt);
$error = mysqli_stmt_error($stmt);
echo sprintf('Fehler %d: %s', $errno, $error);
} else {
echo 'Datensatz eingefügt.';
}
mysqli_stmt_close($stmt);
}
mysqli_close($link);
// Wichtig · Fallstricke
Empfehlung: Statt Fehler manuell mit mysqli_stmt_error() abzufragen, sollte in modernen Anwendungen mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) gesetzt werden. Damit wirft MySQLi bei Fehlern automatisch eine mysqli_sql_exception, die bequem per try/catch behandelt werden kann.
Die zurückgegebene Fehlermeldung kommt direkt vom Datenbankserver und sollte niemals unbereinigt an den Benutzer ausgegeben werden, da sie interne Tabellenstrukturen oder andere sensible Informationen enthalten kann — dies wäre ein Sicherheitsrisiko.