PHP Conference Nagoya 2025

PDO::errorInfo

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDO::errorInfo Ruft die erweiterten Fehlerinformationen ab, die mit der letzten Operation über das Datenbank-Handle verknüpft sind

Beschreibung

public PDO::errorInfo(): array

Parameter-Liste

Diese Funktion besitzt keine Parameter.

Rückgabewerte

PDO::errorInfo() gibt ein Array mit Informationen über den Fehler zurück, der bei der letzten über dieses Datenbank-Handle durchgeführte Operation aufgetreten ist. Das Array besteht mindestens aus den folgenden Feldern:

Element Information
0 SQLSTATE-Fehlercode (eine fünfstellige alphanumerische Kennung, die im ANSI-SQL-Standard definiert ist)
1 Treiberspezifischer Fehlercode
2 Treiberspezifische Fehlermeldung

Hinweis:

Wenn kein SQLSTATE-Fehlercode definiert ist oder kein treiberspezifischer Fehler vorliegt, werden die auf Element 0 folgenden Elemente auf null gesetzt.

PDO::errorInfo() ruft Informationen über Fehler nur bei Operationen ab, die direkt über das Datenbank-Handle ausgeführt werden. Wenn ein PDOStatement-Objekt mittels PDO::prepare() oder PDO::query() erzeugt wird und ein Fehler auf dem Anweisungs-Handle auftritt, zeigt PDO::errorInfo() diesen Fehler nicht an. Um Informationen über den Fehler einer Operation zu erhalten, die über ein bestimmtes Anweisungs-Handle durchgeführt wurde, muss PDOStatement::errorInfo() aufgerufen werden.

Beispiele

Beispiel #1 Anzeigen der errorInfo()-Felder einer PDO_ODBC-Verbindung zu einer DB2-Datenbank

<?php
/* Auslösen eines Fehlers - fehlerhafte SQL-Syntax */
$stmt = $dbh->prepare('bogus sql');
if (!
$stmt) {
echo
"\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

PDO::errorInfo():
Array
(
    [0] => HY000
    [1] => 1
    [2] => near "bogus": syntax error
)

Siehe auch

  • PDO::errorCode() - Ruft den SQLSTATE-Code ab, der mit der letzten Operation über das Datenbank-Handle verknüpft ist
  • PDOStatement::errorCode() - Ruft den SQLSTATE-Code ab, der mit der letzten Operation über das Anweisungs-Handle verknüpft ist
  • PDOStatement::errorInfo() - Ruft die erweiterten Fehlerinformationen ab, die mit der letzten Operation über das Anweisungs-Handle verknüpft sind

add a note

User Contributed Notes 3 notes

up
39
alagar86 at gmail dot com
13 years ago
Please note : that this example won't work if PDO::ATTR_EMULATE_PREPARES is true.

You should set it to false

<?php
$dbh
->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$stmt = $dbh->prepare('bogus sql');
if (!
$stmt) {
echo
"\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
?>
up
23
quickshiftin at gmail dot com
17 years ago
here are the error codes for sqlite, straight from their site:

The error codes for SQLite version 3 are unchanged from version 2. They are as follows:
#define SQLITE_OK 0 /* Successful result */
#define SQLITE_ERROR 1 /* SQL error or missing database */
#define SQLITE_INTERNAL 2 /* An internal logic error in SQLite */
#define SQLITE_PERM 3 /* Access permission denied */
#define SQLITE_ABORT 4 /* Callback routine requested an abort */
#define SQLITE_BUSY 5 /* The database file is locked */
#define SQLITE_LOCKED 6 /* A table in the database is locked */
#define SQLITE_NOMEM 7 /* A malloc() failed */
#define SQLITE_READONLY 8 /* Attempt to write a readonly database */
#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite_interrupt() */
#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
#define SQLITE_CORRUPT 11 /* The database disk image is malformed */
#define SQLITE_NOTFOUND 12 /* (Internal Only) Table or record not found */
#define SQLITE_FULL 13 /* Insertion failed because database is full */
#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
#define SQLITE_EMPTY 16 /* (Internal Only) Database table is empty */
#define SQLITE_SCHEMA 17 /* The database schema changed */
#define SQLITE_TOOBIG 18 /* Too much data for one row of a table */
#define SQLITE_CONSTRAINT 19 /* Abort due to contraint violation */
#define SQLITE_MISMATCH 20 /* Data type mismatch */
#define SQLITE_MISUSE 21 /* Library used incorrectly */
#define SQLITE_NOLFS 22 /* Uses OS features not supported on host */
#define SQLITE_AUTH 23 /* Authorization denied */
#define SQLITE_ROW 100 /* sqlite_step() has another row ready */
#define SQLITE_DONE 101 /* sqlite_step() has finished executing */
up
9
mazen at mindcraftinc dot com
16 years ago
Some PDO drivers return a larger array. For example, the SQL Server driver returns 5 values.

For example:
<?php
$numRows
= $db->exec("DELETE FROM [TableName] WHERE ID between 6 and 17");
print_r($db->errorInfo());
?>

Result:

Array
(
[0] => 00000
[1] => 0
[2] => (null) [0] (severity 0) []
[3] => 0
[4] => 0
)
To Top