Ratrapper elegamment un echec sur u ne connection mysql

Le
charly
Bonjour,

J'utilise pour me connecter à MysqSQL la classe CMysqlDB dont voici le
constructeur :

class CMysqlDb {
var $db;
var $connecte;
function CMysqlDb ($host, $user, $pwd, $db) {

// $this->db = @mysql_connect($host, $user, $pwd);

$this->db = @mysql_connect($host, $user, $pwd) or $connecte = false;
if ($connecte == true){
$this->dbName = $db;
@mysql_select_db($db);
}
}


Le pb est que lorsque la connection échoue, je voudrais non pas sortir
mais positionner un flag.
Ainsi, le script appelant détecte que le flag est faux et que la
connection à la DB a échoué et peut afficher un msg personalisé genre
revenez plus tard, DB down plutot que "Can't establish socket
connection.." qui est pas vraiment user-friendly.

Mon pb est que malgré l'usage de "@" pour dire "chut" :), il crie malgré
tout ;(

Merci de votre aide !
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
loufoque
Le #588975
Tu peux retourner une constante qui indiquerait le type d'erreur et
après ce serait au script appelant de l'interpréter.
Le plus simple dans ce cas ce serait d'utiliser les exceptions.
Jean-Marc Molina
Le #588465
Bonjour,

$this->db = @mysql_connect($host, $user, $pwd) or $connecte = false;


C'est quoi cette horreur ??? ^^.

Si la fonction mysql_connect échoue, elle retourne FALSE, comme indiqué dans
le manuel. Tu dois donc simplement tester $this->db et non pas faire un « or
$connecte = false ». Ca rend le code plus qu'illisible qu'autre chose en
plus de combiner les instructions sur une même ligne.

Le pb est que lorsque la connection échoue, je voudrais non pas sortir
mais positionner un flag.


Tu peux proposer des fonctions Lire_numéro_dernière_erreur et
Lire_message_dernière_erreur par exemple. C'est ce propose les fonctions
mysql et d'autres bibliothèques. Tout comme mysql_connect tu devrais donc
retourner FALSE si la fonction échoue et TRUE si tout s'est bien passé. Si
la fonction retourne FALSE alors on utiliser les fonctions Lire_*_erreur.

if ($connecte == true){


Et la valeur de $connecte a été fixé dans quelle sphère ? ^^. Elle est
seulement fixée si la fonction échoue, à FALSE donc.

@mysql_select_db($db);


Toujours tester la valeur de retour des fonctions, TRUE ou FALSE... Surtout
quand on utilise l'opérateur @.

JM

charly
Le #597009
ah, oui, j'avais oublié que la fonction mysql_connect pouvait me
renvoyer false, tout simplement !!!
honte à moi !
Merci pour le rappel qui tombe à point nommé !
John Gallet
Le #596793
Bonsoir,

Ainsi, le script appelant détecte que le flag est faux et que la
connection à la DB a échoué et peut afficher un msg personalisé genre
revenez plus tard, DB down plutot que "Can't establish socket
connection....." qui est pas vraiment user-friendly.


Si de toutes façons :
1) tu ne peux pas bosser sans bases de données
2) le message est toujours le même
alors il y a beaucoup plus simple et qui évite de systématiquement
s'emmerder à gérer les erreurs/exceptions dans l'appelant (souvenons
nous d'Ariane V...)

function ....
{
$db=@mysql_connect(...);
if($db=úLSE)
exit(include('toutes_nos_excuses_les_plus_plates.html'));
$sel=@mysql_selectdb(...);
if($sel=úLSE)
exit(include('toutes_nos_excuses_les_plus_plates.html'));
} // end func

Ca marche très bien et quand tu reviens de l'appel de la
fonction/méthode, tu ne te poses pas la question de savoir si ça s'est
bien passé ou pas.

a++
JG

Stephane Thomas
Le #602516
John Gallet wrote:
Bonsoir,


function ....
{
$db=@mysql_connect(...);
if($db=úLSE)
exit(include('toutes_nos_excuses_les_plus_plates.html'));
$sel=@mysql_selectdb(...);
if($sel=úLSE)
exit(include('toutes_nos_excuses_les_plus_plates.html'));
} // end func

Ca marche très bien et quand tu reviens de l'appel de la
fonction/méthode, tu ne te poses pas la question de savoir si ça s'est
bien passé ou pas.



Moi je mettrais pluôt ça :

function connect_db ($base)
{
$host="localhost";
$user="bidule";
$password="dsjfyhuisdy";
mysql_connect($host,$user,$password) or die ("Erreur de connexion au
serveur");
mysql_select_db($base) or die ("Erreur de connexion à la base de données");
return $bdd;
}

Ya un truc que j'ai pas compris ?

Stef

John Gallet
Le #602326
mysql_connect($host,$user,$password) or die ("Erreur de connexion au
serveur");
mysql_select_db($base) or die ("Erreur de connexion à la base de données");
Ya un truc que j'ai pas compris ?


Oui : qu'il n'est pas plus élégant pour l'internaute d'avoir "Connection
Failed" que "Erreur de connexion". Mais algorithmiquement nous avons
écrit rigoureusement la même chose : si la connexion echoue, fin brutale.

a++
JG

Publicité
Poster une réponse
Anonyme