Problème de gestion des erreurs MySQL

Petit nouveau ! | 5 Messages

08 juil. 2012, 19:57

Bonjour,

J'ai créer une fonction de connexion à une base de données (en utilisant mysqli), qui fonctionne parfaitement. Sauf pour la gestion des erreurs : lorsqu'une erreur se produit, une redirection est censée être effectuée vers une page d'erreur dédiée. Mais ça ne me redirige pas et ça affiche simplement une erreur normale. Voilà mon code :
<?php
	function DB_Connect($DB_Host, $DB_User, $DB_Password, $DB_Database)
	{
		if(isset($DB_Host) AND isset($DB_User) AND isset($DB_Password) AND isset($DB_Database))
		{
			if(!empty($DB_Host) AND !empty($DB_User) AND !empty($DB_Password) AND !empty($DB_Database))
			{
				$DB = mysqli_connect($DB_Host, $DB_User, $DB_Password, $DB_Database);
				if(!isset($DB))
				{
					$_SESSION['ERROR_CODE'] = base64_encode('DB_CONNECT.FCN#DB-CONNECT');
					REDIRECT_Header('ERROR');
				}
				else
				{
					$DB->real_query('SELECT RESULT FROM es_test');
					$DB_ANSWER = $DB->use_result();
					while($DB_DATA = $DB_ANSWER->fetch_assoc())
					{
						if(!isset($DB_DATA['RESULT']) OR $DB_DATA['RESULT'] != 'success')
						{
							$_SESSION['ERROR_CODE'] = base64_encode('DB_CONNECT.FCN#DB-CONNECT');
							REDIRECT_Header('ERROR');
						}
					}
				}
			}
			else
			{
				$_SESSION['ERROR_CODE'] = base64_encode('DB_CONNECT.FCN#EMPTY-ARGUMENTS');
				REDIRECT_Header('ERROR');
			}
		}
		else
		{
			$_SESSION['ERROR_CODE'] = base64_encode('DB_CONNECT.FCN#ISSET-ARGUMENTS');
			REDIRECT_Header('ERROR');
		}
	}
?>
Je précise que la fonction REDIRECT_Header fonctionne parfaitement (je l'ai testée), ce n'est donc pas elle qui pose problème. Je ne sais donc pas s'il me manque une partie de code, ou si c'est un problème dans mon code...

J'espère que vous pourrez m'aider, merci d'avance !

PS : Comme vous devez vous en douter, j'ai bien entendu créé une table es_test avec une colonne RESULT une entrée success.

ViPHP
xTG
ViPHP | 7331 Messages

08 juil. 2012, 21:24

Un header doit être utilisé avant tout envoi au navigateur.
Donc si un affiche survient le header() ne se ferra pas.

Rajoutes un @ devant la fonction pour éviter l'affichage de l'erreur.

Petit nouveau ! | 5 Messages

08 juil. 2012, 21:42

Merci de la réponse. :) Bon j'ai mis @ devant mysqli_connect, mais ensuite l'erreur venait de real_query et là si je met un @ j'ai l'erreur Parse error: syntax error, unexpected '@', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in [...]. J'ai donc essayé avec error_reporting(0) mais là ça m'affiche une page blanche mais sans me rediriger.

ViPHP
xTG
ViPHP | 7331 Messages

09 juil. 2012, 11:01

@$DB->real_query('SELECT RESULT FROM es_test');

Petit nouveau ! | 5 Messages

09 juil. 2012, 13:35

Je n'ai plus d'erreur avec ce code mais tout de même une page blanche.

ViPHP
xTG
ViPHP | 7331 Messages

09 juil. 2012, 15:00

Normal, si tu ne fais pas le while tu n'as aucune gestion d'erreur.
Il faut vérifier que la fonction real_query() fait quelque chose.

Petit nouveau ! | 5 Messages

09 juil. 2012, 15:37

Tu aurais un code stp ? Je ne sais pas trop comment faire là... :|

ViPHP
xTG
ViPHP | 7331 Messages

09 juil. 2012, 19:53

J'en conclu donc que tu n'as pas codé le reste je me trompe ?
$res = @$DB->real_query('SELECT RESULT FROM es_test');
if( $res === true ){
  // ok
}else{
  // erreur
}

Petit nouveau ! | 5 Messages

10 juil. 2012, 18:48

Si c'est moi qui a codé le reste mais j'ai appris le PHP à ma façon du coup il y a certains trucs que je connais pas encore. Bon merci pour le code. :)