views:

334

answers:

1

I have run into a problem using pdo because an error was not caught.

The code is simple and works just fine, I´ll just include a sample to avoid confusion:

    $sql = 'INSERT INTO somedatetable (something) VALUES (:something) ON DUPLICATE KEY UPDATE something=:something'
    try {
        $stmt = $dbh->prepare($sql);
        $values = array(":something" => $something);

        $stmt->execute($values);

    } catch (PDOException $e) {
        echo "Error!: " . $e->getMessage() . "<br/>";
    }

The code works fine, however when working on a new module, I ran into a problem that no records were added or modified and no error was caught.

$stmt returned false but I did not have a clue why or how to find the error.

The solution was simple in the end, I was using a limited MySQL user that did not have write permissions to the table. These errors always displayed right away when using mysql, but using PDO I do not know how to get to them.

How do I get PHP / PDO to display or catch these kind of database errors?

+2  A: 

PDO::errorInfo() or PDOStatement->errorInfo()

As for exceptions, check the docs for error handling in PDO. Exceptions aren't thrown by default.

Ryan Graham
Thanks, that tells me exactly what I need to know. One more question though, why is the error not caught?
jeroen
You said it returned false, that means it was caught ;-)
Ryan Graham
Ummmmmmmm, what is the point of having a catch statement then if it does not show the message? I thought the whole point of that was to get rid of these if (success) else combinations...
jeroen
Or is (PDOException $e) just wrong? I Must have caught the wrong thing but I am learning :)
jeroen
I agree. I didn't design it, I just read the docs ;-)
Ryan Graham