Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PDO error message? [duplicate]

Tags:

php

pdo

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?

like image 981
JD Isaacks Avatar asked Oct 22 '10 18:10

JD Isaacks


2 Answers

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.

like image 96
Alan Geleynse Avatar answered Sep 22 '22 15:09

Alan Geleynse


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. } 
like image 45
lumonald Avatar answered Sep 20 '22 15:09

lumonald