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());
}
?>
PDO::errorInfo
(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
PDO::errorInfo — Retourne les informations associées à l'erreur lors de la dernière opération sur la base de données
Description
Valeurs de retour
PDO::errorInfo() retourne un tableau contenant des informations sur l'erreur survenu lors de la dernière opération exécutée par ce gestionnaire de base de données. Le tableau contient les champs suivants :
| Élément | Information |
|---|---|
| 0 | Code d'erreur SQLSTATE (un identifiant alphanumérique de cinq caractères défini dans le standard ANSI SQL). |
| 1 | Code d'erreur spécifique au driver. |
| 2 | Message d'erreur spécifique au driver. |
Note:
Si le code d'erreur SQLSTATE n'est pas défini ou s'il n'y a pas d'erreur spécifique du driver, l'élément suivant l'élément 0 sera défini à
NULL.
PDO::errorInfo() retourne uniquement les informations des erreurs pour les opérations exécutées directement sur un gestionnaire de base de données. Si vous créez un objet PDOStatement avec la fonction PDO::prepare() ou la fonction PDO::query() et que vous invoquez une erreur sur le gestionnaire de requête, PDO::errorInfo() ne retournera pas l'erreur depuis le gestionnaire de requête. Vous devez appeler la fonction PDOStatement::errorInfo() pour retourner les informations sur l'erreur pour une opération exécutée sur un gestionnaire de requête particulier.
Exemples
Exemple #1 Affiche les champs d'erreurs pour une connexion PDO_ODBC sur une base de données DB2
<?php
/* Provoque une erreur -- mauvaise syntaxe SQL */
$stmt = $dbh->prepare('mauvaise syntaxe sql');
if (!$stmt) {
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
?>
L'exemple ci-dessus va afficher :
PDO::errorInfo():
Array
(
[0] => 42S02
[1] => -204
[2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N "DANIELS.BONES" is an undefined name. SQLSTATE=42704
)
Voir aussi
- PDO::errorCode() - Retourne le SQLSTATE associé avec la dernière opération sur la base de données
- PDOStatement::errorCode() - Récupère les informations sur l'erreur associée lors de la dernière opération sur la requête
- PDOStatement::errorInfo() - Récupère les informations sur l'erreur associée lors de la dernière opération sur la requête
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
)
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 */
here is a reference to the ansi error codes
there are several others;
a link to the official spec from ansi would be nice
(have to rebuild this link because its too long to post w/o breaking it up)
http://download-east.oracle.com/docs/
cd/B14117_01/appdev.101/a87540/ch2.htm
~quickshiftin`
The example code is incorrect. The line that reads:
$err = $dbh->prepare('SELECT skull FROM bones');
Will set the value of $err to be boolean FALSE.
So, to get a useful error dump change this line:
print_r($err->errorInfo());
to:
print_r($dbh->errorInfo());
