2010-01-20 20 views
17

Staram się pracować z PDO klasy o PHP, ale mam pewne problemy, aby znaleźć właściwą drogę do obsługi błędów, ja napisałem ten kod:Jak obsługiwać wyjątki 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 

?> 

ta część kod nie zgłasza błędów, ale po prostu nie działa, var $status na dole zwraca wartość pustą.

Czy ktoś może mi pomóc znaleźć miejsce, w którym się mylę?

Odpowiedz

41

CHNP nie będzie generować wyjątków, chyba że o tym poinformujesz. Czy uruchomiłeś:

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

na obiekcie PDO?

+1

prosty i szybki! dzięki – vitto

+0

@Matchu: To jest domyślne zachowanie? Od kiedy?! –

+0

Od czasu ostatniego zbudowania klasy bazy danych miesiąc temu. Przynajmniej w moim środowisku tryb cichy był domyślny. – Matchu

1

Możesz dodać atrybut jeden raz podczas łączenia się z 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; 
    } 
    } 

Dzięki

+0

Nice! A co z PDO :: ERRMODE_EXCEPTION? –

+0

W ten sam sposób: PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION – TomerM

+0

[Nie przechwytuj wyjątków, aby je zgłosić] (http://phpdelusions.net/pdo#errors). PHP zrobi to lepiej. –

Powiązane problemy