Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
psql et traitement des erreurs
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  4 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Une Bévue  
View profile   Translate to Translated (View Original)
 More options May 14 2012, 2:47 am
Newsgroups: fr.comp.lang.php
From: Une Bévue <unbewussts...@fai.invalid>
Date: Mon, 14 May 2012 08:47:01 +0200
Local: Mon, May 14 2012 2:47 am
Subject: psql et traitement des erreurs
Dans un INSERT, j'ai une erreur :
ERROR:  value too long for type character varying(30)
(testé depuis le Terminal)

Mais dans le php je n'arrive pas à printer cette erreur :

--- code ------------------------------------------------
$ret=$db->query($sql);
try {
   while($row=$ret->fetch()){ // line 492
     $rowid=$row['rowid'];
   }
   // do something

} catch (Exception $e) {

   echo $e->getMessage()."<br />\n";
}

---------------------------------------------------------

j'ai essayé aussi, sans succès, PDOException :

--- code ------------------------------------------------

} catch (PDOException $e) {

   echo $e->getMessage()."<br />\n";
}

---------------------------------------------------------

j'obtiens l'erreur :
Fatal error: Call to a member function fetch() on a non-object in
/Users/yt/Sites/landp_public/landp.php on line 492

la ligne 492 étant "while($row=$ret->fetch()){"

bien sûr, il conviendrait dans changer pour la colonne fautive
varchar(30) en qqc d'autre, de plus grand.

MAIS, je souhaite d'abord piger comment visualiser l'erreur obtenue au
terminal, comment faire ?

ie. plutôt que bloquer le script php.

puis-je obtenir l'erreur depuis $ret ?


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Une Bévue  
View profile   Translate to Translated (View Original)
 More options May 14 2012, 3:12 am
Newsgroups: fr.comp.lang.php
From: Une Bévue <unbewussts...@fai.invalid>
Date: Mon, 14 May 2012 09:12:00 +0200
Subject: Re: psql et traitement des erreurs
On 14/05/12 08:47, Une Bévue wrote:
  puis-je obtenir l'erreur depuis $ret ?

NON, c'est avec $db :

--- code ---------------------------------------
         if($ret){
            // do something
         }else{
            // get error :

            $errorInfo=$db->errorInfo();

         }
------------------------------------------------

Maintenant il ne me reste plus qu'à faire un alter table sur les
colonnes de varchar(30)...


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Clément  
View profile   Translate to Translated (View Original)
 More options May 14 2012, 2:10 pm
Newsgroups: fr.comp.lang.php
From: Clément <t...@example.net>
Date: Mon, 14 May 2012 20:10:25 +0200
Local: Mon, May 14 2012 2:10 pm
Subject: Re: psql et traitement des erreurs
Le 14/05/2012 08:47, Une Bévue a écrit :

> puis-je obtenir l'erreur depuis $ret ?

L'erreur "Fatal error: Call to a member function fetch() on a non-object
in /Users/yt/Sites/landp_public/landp.php on line 492"
signifie que $ret n'est pas un objet PDO et donc que potentiellement
$ret=$db->query($sql); n'a pas réussi car, comme l'indique la doc (
http://fr.php.net/manual/fr/pdo.query.php ), si query() fait une erreur,
$ret = false.
Il suffirait de mettre cette ligne dans le try/catch pour en savoir un
peu plus.

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Une Bévue  
View profile   Translate to Translated (View Original)
 More options May 14 2012, 2:57 pm
Newsgroups: fr.comp.lang.php
From: Une Bévue <unbewussts...@fai.invalid>
Date: Mon, 14 May 2012 20:57:33 +0200
Local: Mon, May 14 2012 2:57 pm
Subject: Re: psql et traitement des erreurs
On 14/05/12 20:10, Clément wrote:

> Il suffirait de mettre cette ligne dans le try/catch pour en savoir un
> peu plus.

oui, j'ai appris ça ))

je n'ai pas mis de try catch, mais :

           $ret=$db->exec($sql);
           if($ret){
                // pas d'erreur procéder normalement
           }else{
                // une erreur :
                $errorInfo=$db->errorInfo();
           }

j'ai aussi augmenté mes varchar(30) à varchar(256) pour ne plus avoir
d'erreur...

il me reste, pour essayer try / catch à mettre :

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

sinon je ne "catch" rien...

car l'erreur SQL se produit à la ligne :

$ret=$db->exec($sql);

mais n'est vue par php qu'au :
while($row=$ret->fetch()){ ... }
qui suiT.

en fait l'erreur donnée par psql utilisé en ligne de commande est très
claire :
ERROR:  value too long for type character varying(30)

je dois être plus généreux sur la longueur de mes varchar, par ex
varchar(1024) pour une URL n'est pas trop : je viens d'essayer avec une
URL correspondant à un point Google Maps, ça donne une longi-ueur de 329...


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »