psql et traitement des erreurs

Le
Une Bévue
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 />";
}


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

code
} catch (PDOException $e) {
echo $e->getMessage()."<br />";
}



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 ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Une Bévue
Le #24475461
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)...
Clément
Le #24476881
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.
Une Bévue
Le #24477011
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...
Publicité
Poster une réponse
Anonyme