2010-01-20 3 views
17

Я пытаюсь работать с PDO класса на PHP, но у меня есть некоторые проблемы, чтобы найти правильный способ обработки ошибок, я писал этот код:Как обрабатывать исключения PDO

<?php 
// $connection alreay created on a class which works with similar UPDATE statements 
// I've simply added here trim() and PDO::PARAM... data type 


$id = 33; 
$name = "Mario Bros."; 
$url = "http://nintendo.com"; 
$country = "jp"; 


try { 

$sql = "UPDATE table_users SET name = :name, url = :url, country = :country WHERE user_id = :user_id"; 

$statement = $connection->prepare ($sql); 

$statement->bindParam (':user_id', trim($id), PDO::PARAM_INT); 
$statement->bindParam (':name', trim($name), PDO::PARAM_STR); 
$statement->bindParam (':url', trim($url), PDO::PARAM_STR); 
$statement->bindParam (':country', trim($country), PDO::PARAM_STR, 2); 

$status = $statement->execute(); 

} catch (PDOException $e) { 
    print $e->getMessage(); 
} 

print $status; // it returns a null value, and no errors are reported 

?> 

эта часть код не сообщает об ошибках, но он просто не работает, а в нижнем - $status, возвращает нулевое значение.

Может кто-нибудь помочь мне найти, где я ошибаюсь?

ответ

41

PDO не будет генерировать исключения, если вы не сообщите об этом. Вы запустили:

$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

на объекте PDO?

+1

просто и быстро! спасибо – vitto

+0

@Matchu: Это поведение по умолчанию? С каких пор?! –

+0

Поскольку я последний раз построил класс базы данных месяц назад или около того. По крайней мере, в моей среде тихий режим был по умолчанию. – Matchu

1

Вы можете добавить атрибут один раз, когда вы подключаете mysql.

function connect($dsn, $user, $password){ 
    try { 
     $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); 
    } catch (PDOException $e) { 
     echo 'Connection failed: ' . $e->getMessage(); 
     exit; 
    } 
    } 

Благодаря

+0

Ницца! Как насчет PDO :: ERRMODE_EXCEPTION? –

+0

То же самое PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION – TomerM

+0

[Не перехватывайте исключения, чтобы сообщить об этом] (http://phpdelusions.net/pdo#errors). PHP будет делать это лучше. –