Start · Sprachen · PHP · Referenz · mysqli_stmt_error

mysqli_stmt_error

Funktion

Gibt die Fehlermeldung des zuletzt aufgetretenen Fehlers für ein vorbereitetes Statement als Zeichenkette zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_stmt_error(mysqli_stmt $statement): string

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

Typ
string
Beschreibung
Gibt die Fehlermeldung des zuletzt aufgetretenen Fehlers als Zeichenkette zurück. Ist kein Fehler aufgetreten, wird eine leere Zeichenkette ('') 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();
Prepare-Fehler: Table 'testdb.nicht_vorhandene_tabelle' doesn't exist

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);
Fehler 1062: Duplicate entry '1' for key 'PRIMARY'

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