If your query is successful, PDO::errorInfo() still returns an array. For MySQL 5.x, I get the following...
Array
(
[0] => 00000
[1] =>
[2] =>
)
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::errorInfo — Ruft die erweiterten Fehlerinformationen ab, die mit der letzten Operation über das Anweisungs-Handle verknüpft sind
Diese Funktion besitzt keine Parameter.
PDOStatement::errorInfo() gibt ein Array mit Informationen über den Fehler zurück, der bei der letzten über dieses Anweisungs-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 |
Beispiel #1 Anzeigen der errorInfo()-Felder einer PDO_ODBC-Verbindung zu einer DB2-Datenbank
<?php
/* Auslösen eines Fehlers - die Tabelle BONES existiert nicht */
$sth = $dbh->prepare('SELECT skull FROM bones');
$sth->execute();
echo "\nPDOStatement::errorInfo():\n";
$arr = $sth->errorInfo();
print_r($arr);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
PDOStatement::errorInfo(): Array ( [0] => 42S02 [1] => -204 [2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N "DANIELS.BONES" is an undefined name. SQLSTATE=42704 )
If your query is successful, PDO::errorInfo() still returns an array. For MySQL 5.x, I get the following...
Array
(
[0] => 00000
[1] =>
[2] =>
)
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.
Ansi sql state Error codes can be found here:
https://docs.oracle.com/cd/F49540_01/DOC/server.815/a58231/appd.htm