Start · Sprachen · PHP · Referenz · mysql_error

mysql_error

Funktion

Gibt den Fehlertext der zuletzt ausgeführten MySQL-Operation zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

mysql_error(resource $link_identifier = null): string

Beschreibung

mysql_error() liefert die Fehlermeldung der zuletzt fehlgeschlagenen MySQL-Datenbankoperation als lesbaren String. Ist kein Fehler aufgetreten, wird ein leerer String zurückgegeben. Die Funktion ist nützlich, um nach einem fehlgeschlagenen mysql_query()- oder mysql_connect()-Aufruf den genauen Fehlergrund zu ermitteln.

Optional kann eine bestehende Verbindungsressource übergeben werden. Fehlt dieser Parameter, wird die zuletzt geöffnete MySQL-Verbindung verwendet. Die Fehlermeldung stammt direkt vom MySQL-Server und ist daher in der Sprache des Servers (üblicherweise Englisch).

Wichtiger Hinweis: Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet (deprecated) markiert und in PHP 7.0.0 vollständig entfernt. Für neuen Code sollten stattdessen mysqli_error() oder PDO::errorInfo() verwendet werden.

Parameter

Name Typ Default Beschreibung
$link_identifier resource null Eine MySQL-Verbindungsressource, die von mysql_connect() zurückgegeben wurde. Wird der Parameter weggelassen, wird die zuletzt geöffnete Verbindung verwendet. Existiert keine offene Verbindung, gibt die Funktion einen leeren String zurück.

Rückgabewert

Typ
string
Beschreibung
Der Fehlertext der letzten MySQL-Operation als String. Ist kein Fehler aufgetreten oder existiert keine aktive Verbindung, wird ein leerer String zurückgegeben.

Beispiele

Fehlerbehandlung nach fehlgeschlagenem Query

<?php
$link = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $link);

$result = mysql_query('SELECT * FROM nicht_vorhandene_tabelle', $link);

if (!$result) {
    $fehler = mysql_error($link);
    echo 'Datenbankfehler: ' . htmlspecialchars($fehler);
    // Ausgabe z. B.: Datenbankfehler: Table 'meine_datenbank.nicht_vorhandene_tabelle' doesn't exist
}

mysql_close($link);
Datenbankfehler: Table 'meine_datenbank.nicht_vorhandene_tabelle' doesn't exist

Fehlerprüfung ohne explizite Verbindungsressource

<?php
// Verbindung ohne explizites Handle
mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank');

$result = mysql_query('INSERT INTO benutzer (id) VALUES ("doppelt")');

if (!$result) {
    // Ohne Ressource: letzte Verbindung wird genutzt
    echo 'Fehler: ' . mysql_error();
}
Fehler: Duplicate entry 'doppelt' for key 'PRIMARY'

// Wichtig · Fallstricke

Veraltet und entfernt: mysql_error() gehört zur mysql_*-Erweiterung, die seit PHP 5.5.0 als deprecated gilt und in PHP 7.0.0 vollständig entfernt wurde. Code, der diese Funktion verwendet, ist nicht mehr lauffähig auf PHP 7 oder neuer.

Sicherheitswarnung: Fehlermeldungen des MySQL-Servers niemals unverarbeitet direkt an den Browser ausgeben, da sie sensible Informationen (Tabellenstruktur, Datenbankname, Feldnamen) preisgeben können. Immer htmlspecialchars() verwenden und Fehlermeldungen im Produktivbetrieb nur ins Log schreiben.

Als moderne Alternativen stehen mysqli_error($link) für prozedurale Nutzung oder $mysqli->error objektorientiert sowie $pdo->errorInfo() zur Verfügung.