2009-09-03 10 views
4

Comment dois-je préparer le code si quelque chose échoue? Avec une déclaration try-catch ou?PHP et Postgres: des erreurs de capture?

function delete_question ($question_id) { 
    $dbconn = pg_connect("host=localhost port=5432 dbname=heoa user=heoa password=123"); 

    // removes questions and its dependencies: answers and tags 
    $result = pg_query_params ($dbconn, 
     'DELETE FROM questions 
     WHERE question_id = $1', 
     array ($question_id) 
    ); 

Répondre

7

Si vous voulez des exceptions, vous devez utiliser PDO. En cas de fonctions pg_ * et de votre code, vous devez vérifier si $ result a la valeur false, si c'est le cas, une erreur est survenue.

Vous pouvez obtenir la description de l'erreur avec pg_last_error()

Quelque chose comme ceci:

$result = pg_query_params ($dbconn, 
     'DELETE FROM questions 
     WHERE question_id = $1', 
     array ($question_id) 
    ); 


if ($result === false) { 
    print pg_last_error($dbconn); 
} else { 
    print 'everything was ok'; 
} 

Donc, en gros, chaque fois que vous utilisez un pg_ * fonction, vous devez vérifier si false a été renvoyée , c'est comme ça avec ces fonctions.

Oui, vous pouvez créer vos propres wrappers donc, au lieu de pg_query *, vous appelez my_db_query(), qui effectue ensuite la vérification de la valeur de retour et le lancement des exceptions. Ou, vous pouvez aller avec PDO, qui est capable de vous lancer PDOException pour toutes les erreurs qui peuvent se produire.

+0

Vous voulez dire que je pouvais attraper pg_last_error sans lancer-déclaration explicite? – hhh

+0

En savoir plus sur la fonction: http://us.php.net/manual/fr/function.pg-last-error.php – hhh

+1

Vous pouvez toujours envelopper vos propres exceptions autour des fonctions pg_ *. –

0

J'ai une autre pratique

$result = pg_query_params ($dbconn,'DELETE FROM questions WHERE question_id = $1', array ($question_id)) 
      or die(pg_last_error($dbconn));