2010-01-20 22 views
17

Estoy tratando de trabajar con PDO clase en php pero tengo algunos problemas para encontrar el camino correcto para controlar los errores, he escrito este código:Cómo manejar excepciones DOP

<?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 

?> 

esta porción de el código no informa errores, pero simplemente no funciona, var $status en la parte inferior, devuelve un valor nulo.

¿alguien me puede ayudar a encontrar mi error?

Respuesta

41

PDO no arrojará excepciones a menos que así lo indique. ¿Ha ejecutado:

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

en el objeto PDO?

+1

sencillo y rápido! gracias – vitto

+0

@Matchu: ¿Este es el comportamiento predeterminado? ¡¿Desde cuando?! –

+0

Desde la última vez que construí una clase de base de datos hace aproximadamente un mes. Al menos en mi entorno, el modo silencioso era el predeterminado. – Matchu

1

Puede agregar el atributo una vez mientras conecta 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; 
    } 
    } 

Gracias

+0

¡Agradable! ¿Qué pasa con PDO :: ERRMODE_EXCEPTION? –

+0

Del mismo modo PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION – TomerM

+0

[No detecta excepciones para informarlos] (http://phpdelusions.net/pdo#errors). PHP lo hará mejor. –

Cuestiones relacionadas