Here is a snippet of my code:
$qry = ' INSERT INTO non-existant-table (id, score) SELECT id, 40 FROM another-non-existant-table WHERE description LIKE "%:search_string%" AND available = "yes" ON DUPLICATE KEY UPDATE score = score + 40 '; $sth = $this->pdo->prepare($qry); $sth->execute($data); print_r($this->pdo->errorInfo());
This should give me an error because the tables don't even exist. All I get however is this:
Array ( [0] => 00000 )
How can I get a better description of the error so I can debug the issue?
Try this instead:
print_r($sth->errorInfo());
Add this before your prepare:
$this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
This will change the PDO error reporting type and cause it to emit a warning whenever there is a PDO error. It should help you track it down, although your errorInfo should have bet set.
Old thread, but maybe my answer will help someone. I resolved by executing the query first, then setting an errors variable, then checking if that errors variable array is empty. see simplified example:
$field1 = 'foo'; $field2 = 'bar'; $insert_QUERY = $db->prepare("INSERT INTO table bogus(field1, field2) VALUES (:field1, :field2)"); $insert_QUERY->bindParam(':field1', $field1); $insert_QUERY->bindParam(':field2', $field2); $insert_QUERY->execute(); $databaseErrors = $insert_QUERY->errorInfo(); if( !empty($databaseErrors) ){ $errorInfo = print_r($databaseErrors, true); # true flag returns val rather than print $errorLogMsg = "error info: $errorInfo"; # do what you wish with this var, write to log file etc... /* $errorLogMsg will return something like: error info: Array( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table bogus(field1, field2) VALUES ('bar', NULL)' at line 1 ) */ } else { # no SQL errors. }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With