PDOStatement::errorInfo

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

PDOStatement::errorInfo Busca informação de erro estendida associada com a última operação no identificador da instrução

Descrição

public PDOStatement::errorInfo(): array

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

PDOStatement::errorInfo() retorna um array de informações de erro sobre a última operação realizada por este objeto de instrução. O array consiste de pelo menos os campos a seguir:

Elemento Informação
0 Código de erro SQLSTATE (um identificador alfanumérico de cinco caracteres definido no padrão ANSI SQL).
1 Código de erro específico do driver.
2 Mensagem de erro específica do driver.

Exemplos

Exemplo #1 Mostrando campos de errorInfo() para uma conexão PDO_ODBC a um banco de dados DB2

<?php
/* Provoca um erro -- a tabela OSSOS não existe */
$sth = $dbh->prepare('SELECT cranio FROM ossos');
$sth->execute();

echo
"\nPDOStatement::errorInfo():\n";
$arr = $sth->errorInfo();
print_r($arr);
?>

O exemplo acima produzirá:

PDOStatement::errorInfo():
Array
(
    [0] => 42S02
    [1] => -204
    [2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N  "LUCY.OSSOS" is an undefined name.  SQLSTATE=42704
)

Veja Também

  • PDO::errorCode() - Busca o SQLSTATE associado com a última operação no identificador do banco de dados
  • PDO::errorInfo() - Busca informação de erro estendida associada com a última operação no identificador do banco de dados
  • PDOStatement::errorCode() - Busca o SQLSTATE associado com a última operação no objeto da instrução

add a note

User Contributed Notes 4 notes

up
8
richardverason at gmail dot com
5 years ago
Seriously errorInfo is your friend. Use it.

If these look like your google searches then you need errorInfo

"no database error showing in php"
"pdo selects from database but wont insert"
"pdo insert not working"
"isnt pdo just a big hype, should I go back to mysql?"
"how much do surgeons make?"

Trust me it will definitely save you hours of insanity if you make it a habit to use it in development. Forget E-ALL, it failed me since well, E-ALL apparently doesn't know that I didn't set a default value in my MySQL table and my query wasnt adding anything to it. So always do this

<?php

$sql
= 'do something on a mysql table where foo = :bar';
$stmt = prepare($sql);
$stmt->bindValue(':bar', $foo, PDO::PARAM_[DATA TYPE]);
$stmt->execute();

// very important during development. But take it off in production
$foo_arr = $stmt->errorInfo();
print_r($foo_arr);

//Sample print_r return
/*
Array(
[0] => HY000
[1] => 1364
[2] => Field 'phone' doesn't have a default value
)
Never have I been so happy to see an error
*/
?>

While its common practice for any decent developer to always watch out and try to catch for errors, even the best of us make mistakes. This is not a replacement for exceptions, but the simplicity is priceless.
up
16
Geoffrey Hoffman
8 years ago
If your query is successful, PDO::errorInfo() still returns an array. For MySQL 5.x, I get the following...

Array
(
[0] => 00000
[1] =>
[2] =>
)
up
-39
Deuchnord
9 years ago
Sorry, my example below is not correct, this is a correction:

<?php
$listOfUsers
= $db->query('SELECT name from uesrs');
$errorInfo = $listOfUsers->errorInfo();
if(
$errorInfo[0] != 0)
die(
$errorInfo[2]);
?>
To Top