Fehlercodes und Meldungen der Datenbank
Diese Seite richtet sich an Datenbankadministratoren und Entwickler, die die Datenbankfehler von Exponential lesen oder Code
schreiben, der darauf reagieren muss. Sie beantwortet: welche Nummer eine gescheiterte Anweisung auf jeder Engine meldet, wie
Fehler den Code erreichen und was die eigenen Meldungen der Treiber bedeuten. Quelle:
Eine Website betreiben, kennen Sie Ihren Datenbanktreiber und die
Treiber in lib/ezdb/classes/.
Inhalt
- Die eigene Nummer der Engine
- Zwei Arten der Fehlerbehandlung
- Exception-Klassen
- Meldungen und wo sie erscheinen
- Eine Fehlerreferenz lesen
Die eigene Nummer der Engine
Die Fehlernummer einer gescheiterten Anweisung ist die eigene der Datenbank, in $db->errorNumber() und, bei
Exception-Behandlung, als getCode() der geworfenen eZDBException:
| Treiber | Doppelter Schlüssel | Fehlende Tabelle |
|---|---|---|
| MySQL, MariaDB | 1062 | 1146 |
| PostgreSQL (der SQLSTATE, eine Zeichenkette) | '23505' | '42P01' |
| SQLite (der Ergebniscode) | 19 | 1 |
| Oracle (die ORA-Nummer) | 1 | 942 |
MongoDB (nur errorNumber(); der Treiber antwortet mit false und wirft nichts) | 11000 |
Hinweis zum Upgrade: errorNumber() von PostgreSQL war früher für jeden Fehler 1 und ist jetzt der SQLSTATE.
Zwei Arten der Fehlerbehandlung
$db = eZDB::instance();
$db->setErrorHandling( eZDB::ERROR_HANDLING_EXCEPTIONS );
try
{
$db->query( "INSERT INTO my_table ( id ) VALUES ( 1 )" );
}
catch ( eZDBException $e )
{
if ( $e->getCode() === 1062 || $e->getCode() === '23505' ) // MySQL, PostgreSQL
{ /* the row is there already */ }
}
$db->setErrorHandling( eZDB::ERROR_HANDLING_STANDARD );- Standard (der Standard): Eine gescheiterte Anweisung wird protokolliert, und der Aufruf gibt
falsezurück; innerhalb einer Transaktion meldet der Kernel das Scheitern. - Exceptions:
eZDBExceptionmit dem Code der Engine. Damit wirft MySQL unter PHP 8.1 und neuereZDBExceptionstatt PHPsmysqli_sql_exception. - Der SQLite-Treiber wirft innerhalb einer Transaktion; außerhalb antwortet er mit
falseund gesetztemerrorNumber().
Vergleichen Sie Codes je Engine, nie den Text der Meldung, der sich nach Engine, Version und Sprache unterscheidet.
Exception-Klassen
| Klasse | Wann |
|---|---|
eZDBNoConnectionException | die Verbindung ließ sich (nach ConnectRetries) nicht öffnen; der Einrichtungsassistent und index.php melden eine nicht erreichbare Datenbank. Auf SQLite enthält die Meldung den vollständigen Pfad der Datei |
eZDBException | eine gescheiterte Anweisung bei eingeschalteter Exception-Behandlung |
Meldungen und wo sie erscheinen
| Meldung | Geschrieben von | Wo | Seite |
|---|---|---|---|
| "Database implementation not supported: ..." | eZDB::instance() | var/log/error.log | Einstellungen lesen und ändern |
| "No database handler was found for '...'" | die Null-Datenbank eZNullDB | die Fehlerseite | dieselbe |
| "SQLite3 extension was not found, the DB handler will not be initialized." | eZSQLite3DB | error.log | PHP-Erweiterungen |
| "database is busy: the transaction could not start within N s, another write held the lock all that time; nothing was written" | eZSQLite3DB | error.log, die Fehlerseite | Schreibwarteschlange |
| "the transaction could not start: ...; nothing was written" | eZSQLite3DB | dasselbe | dieselbe |
| "attempt to write a readonly database" | SQLite | error.log | Rechte |
| "Connection warning: could not set the connection charset to 'utf8'; it is '...'" | eZMySQLiDB | warning.log mit AlwaysLog[]=warning | utf8mb4 |
| "The 'digest' function is not available in your database, and Exponential cannot run without it." | der Einrichtungsassistent | der Assistent | PostgreSQL |
| "Failed to parse MongoDB URI: ... 'default' authentication mechanism requires a username" | der MongoDB-Treiber | error.log | MongoDB |
MONGO TODO arrayQuery: tables=[...] caller=... | expMongoDB | die Logs | Grenzen von MongoDB |
| "The database schema could not be read." | die Upgrade-Prüfung | die Seite | Das Schema prüfen |
| "The audit index classes are not in the autoload array" | createaudittables.php | die Shell | Update auf 6.0.15 |
Eine Fehlerreferenz lesen
Eine Fehlerseite zeigt eine kurze Referenz. exp:logs findet den Fehler anhand dieser Referenz und zeigt die Zeilen seiner
Anfrage, mit standardmäßig maskierten personenbezogenen Daten
(Einen Fehler anhand seiner Referenz finden).
Verwandte Seiten
- Datenbankfehler beheben
- SQL von Erweiterungen für jede Engine prüfen
- Wenn etwas schiefgeht
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.