Gestion d'erreur mysql

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 190 fois - Téléchargée 25 fois

Contenu du snippet

cette fonction est faite pour etre substitué a mysql_query

fini les éternels OR die(mysql_error()) ,cette fonction le fait a votre place.
un avantage est qu'elle renvoi la ligne de l'erreur

uniquement sous php5

Source / Exemple :


function execute_query($query){
     if(!$return = mysql_query($query))
     {
	// Création d'une exception
	// afin de pouvoir récuper la trace 
	// et remonter a la source de l'appel de la fonction
	$return = new Exception("Erreur SQL");
	$tbl = $return->getTrace();
	echo'<table class="mysql_error"><tr><td><b>erreur dans la base de donnée. Faites en part à l\'administrateur</b></td></tr><tr><td><b>'.mysql_errno().' :</b> '.mysql_error().'</td></tr><tr><td colspan="2">Dans '.$tbl[1]['file'].' ligne '.$tbl[1]['line'].'</table>';
	mysql_close();
	exit;
	}
     return $return;
}

A voir également

Ajouter un commentaire

Commentaires

FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
"php est un language fait pour etre le plus simplifié"
Simplifié ne veut pas dire enfantin. Ce n'est pas parce que PHP est plus laxiste que d'autres langages qu'il faut forcément tabler dessus.

"tous ses try catch sont bien beau mais se sont des lignes superflues"Du grand n'importe quoi. On voit que tu n'as jamais utilisé ce genre de méthode. Les try{}catch{} combinés avec les exceptions peuvent te fournir bien plus de lisibilité que n'importe quoi. D'ailleurs, les exceptions marchent généralement de pairs avec l'instruction try{}catch{}. Si tu n'est pas convaincu, va voir la doc à ce sujet.

"les objets en php peuvent etre utile, mais ils ne doivent pas remlacer se qui ne l'est pas en empiétant sur la facilité du language"La prog objet en PHP est d'une facilité assez déconcertante... Le mot objet n'enlève en rien la facilité de langage de PHP, c'est juste une autre méthode de coder.

"sinon si vous voulez un préprossesseur objet... utiliser jsp." Bah non, moi j'ai PHP et je trouve ca bien. Si j'ai besoin d'utiliser jsp, ca sera pour autre chose qu'un site web personnel.
bebe47
Messages postés
14
Date d'inscription
dimanche 19 février 2006
Statut
Membre
Dernière intervention
23 juillet 2006
-
oui mais c'est pas le but de ma fonction

php est un language fait pour etre le plus simplifié (apres 10 min d'utilisation d'un autre language on l'aura remarqué) donc j'ai fait une fonction des plus simples d'utlisation qui permet tout de meme d'avoir une info sur la source de l'erreur pour faciliter le débugage. sinon comme vous l'avez remarqué sans doute elle est classé dans astuce elle n'est rien de plus rien de moin mais peu etre bien utilise parfois
tous ses try catch sont bien beau mais se sont des lignes superflues

les objets en php peuvent etre utile, mais ils ne doivent pas remlacer se qui ne l'est pas en empiétant sur la facilité du language

sinon si vous voulez un préprossesseur objet... utiliser jsp.
FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
class mysql {

public function query($query) {
return mysql_query($query) or throw new Exception(mysql_error());
}

}

try {
$sql = new mysql;
$sql->query($x);
} catch ( Exception $e ) {
die ( $e->getMessage() );
}

Tout est dans la classe, j'aurais aussi pu mettre le try{//}catch{//} dans la classe :)
bebe47
Messages postés
14
Date d'inscription
dimanche 19 février 2006
Statut
Membre
Dernière intervention
23 juillet 2006
-
c'est vrai le code n'est disponible que sous php5

malaham c'est vrai que jeter un exception aurait pus etre plus recommendé plus estétique...
mais beaucoup de personne font leur mysql_query(..); sans s'occuper des erreurs engendrées. alors mieux vaut ne pas faire un code tres long ..

class SQLException extends Exception
{
public function printStackTrace()
{
print this->getMessage();
foreach(this->getTrace() as $trace)
{
foreach($trace as $key=>$value)
print "$key = $value,";
print "
";
}
}
}

function thorwing_query($query)
{
if(!$return = mysql_query($query))
throw new SQLException("Erreur SQL ".mysql_errno()." : ".mysql_error);
return $return;
}

try
{
thorwing_query($query);
} catch(SQLException $e){
$e->printStackTrace();
}


c'est un peu lourd comme code...

sinon comme les classes prédéfinies n'exploitent pas les exceptions, a moin d'un projet de grande envergure, ill ne vaut pas la peine de l'utiliser
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
hello,

ouais, enfin, à mettre dans une classe avec sa propre gestion des erreurs, et des try catch, parce que là, c'est léger...mais bon. Pourquoi pas, ça montre une utilisation des exceptions, trop rares... :-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.