IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer une exception en retour


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut Récupérer une exception en retour
    Salut à tous

    voila,
    j'ai une class perso qui s'appuie sur pdo pour faire mes requetes en bdd...
    bon super ça marche

    dans ma class j'ai donc ça comme fonction par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function insert ( $table, $ins=array()) {
    	try {
    	 $sql = "INSERT INTO $table (".implode(',',array_keys($ins)).") VALUES (" . implode(',', array_fill(0, count($ins), '?')) . ")";
     
    //	trace ($sql);
    //	trace ($ins);
     
    	$q = $this->prepare($sql);
    	$q->execute(array_values($ins));
     
    	return $this->lastInsertId(); 
     
     
    	//query ($this, 'INSERT INTO  `'.$table.'` '.$str_col.' VALUES '.$str_val);
    	//query ($this, );
    	}catch (PDOException  $e) {
    		trace ($e,'e');
    		return $e;
       	 //die( $this->msg_error($sql.'<br />'.$e->getMessage(), true));
    	 // $err =   new Exception($this->msg_error($sql.'<br />'.$e->getMessage(), true));
    	 // trace ($err,'err');
    	//  return $err;
    	// return false;
    	}
    }

    et pour appeler cette fonction je fais un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     try  {
    		$idl = $db->insert ( 'labos', $arr);		
    		trace ($idl,'idl');		
    	}catch(Exception $e) {
    		echo '---------';
    		trace ($e,'exception');
    	}
    bon imaginons que j'ai pas mis une requette sql valide

    dans ma class PDO je vais avoir donc une exception de levée

    ce que j'aimerai c'est la récupérer et passer donc dans la partie catch de mon script d'appel ...et pas avoir juste $idl qui contient mon exception... parce que je veux détecter que c'est une exception et passer en catch direct .. Pour enregistrer que j'ai eu une erreur et en faire ce que je veux ...

    ben mon pb c'est que je ne sais pas comment retourner cette exception comme il faut...

    help

    d'avance merci
    ++

  2. #2
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Par défaut
    A priori, je dirai deux possibilité :
    • Tu enlève le try catch PDOException dans ta fonction insert().
      Automatiquement, si une exception est levée, si la fonction appelante a un try catch, elle la récupérera.
    • Tu relances l'exception dans le try catchPDOException en faisant un throw
      Dans ce cas, tu peux même en renvoyer une autre de ton choix...

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut
    Je voudrai garder le catch dans ma class ...

    mais j'ai essayé de la recréer mais elle ne passe toujours pas en catch de l'autre côté

    t'aurais pas un bout de code d'exemple que je comprenne mieux ?
    ça m'aiderai beaucoup

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut
    c'est bon j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	 try  {
    		 $db->beginTransaction();
    		 $idl = $db->insert ( 'labo', $arr);		
     
     
    	} catch(PDOException $e) {		
    		$error = 1;
    		trace ($e,'exception');
    		$db->rollBack();
    	}
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function insert ( $table, $ins=array()) {
    	try {
    	 $sql = "INSERT INTO $table (".implode(',',array_keys($ins)).") VALUES (" . implode(',', array_fill(0, count($ins), '?')) . ")";
     
    //	trace ($sql);
    //	trace ($ins);
     
    	$q = $this->prepare($sql);
    	$q->execute(array_values($ins));
     
    	return $this->lastInsertId(); 
     
     
    	}catch (PDOException  $e) {
     
    		throw new PDOException($this->msg_error($sql.'<br />'.$e->getMessage(), true));
     
     
    	}
    }
    grand merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/05/2008, 15h04
  2. Réponses: 2
    Dernier message: 13/05/2008, 17h19
  3. Récupérer une exception dans une page d'erreur
    Par crawling5 dans le forum JSF
    Réponses: 3
    Dernier message: 15/11/2007, 08h46
  4. [Console] Récupérer une valeur de retour
    Par lapanne dans le forum C#
    Réponses: 1
    Dernier message: 13/04/2007, 12h25
  5. [WinDev 7.5] Récupérer une exception
    Par sylsau dans le forum WinDev
    Réponses: 1
    Dernier message: 29/12/2006, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo