Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/09/2011, 18h25   #1
Membre du Club
 
Inscription : janvier 2007
Messages : 236
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 236
Points : 62
Points : 62
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 :
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 :
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
++
CaviarNAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 18h37   #2
Membre confirmé
 
Homme Clément
Développeur informatique
Inscription : décembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 213
Points : 277
Points : 277
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...
Climoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 18h41   #3
Membre du Club
 
Inscription : janvier 2007
Messages : 236
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 236
Points : 62
Points : 62
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
CaviarNAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 18h48   #4
Membre du Club
 
Inscription : janvier 2007
Messages : 236
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 236
Points : 62
Points : 62
c'est bon j'ai trouvé

Code :
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 :
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 !
CaviarNAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h59.


 
 
 
 
Partenaires

Hébergement Web