par
Tatiana » 26 sept. 2006, 04:53
Bonjour!
J'aimerais savoir comment se gère l'ouverture et la fermeture de la connexion à une base de données mysql.
Je m'explique, j'utilise une classe pour gérer mes accès. J'ai deux fichiers (la source complète est
ici, tout en bas de la page). L'un est "connexion.php" (je n'écris pas mes données ici mais j'ai inscrit les valeurs approprées, bien sûr):
Code : Tout sélectionner
<?php
$mysql_adresse = "localhost";
$mysql_login = "root";
$mysql_pass = "";
$mysql_base = "votre_base";
?>
L'autre est mysql.php, qui comprend entre autres:
Code : Tout sélectionner
function connexion() {
// méthode privée
// connexion à la base de données
if ($this->base) {
$obj_db = mysql_connect($this->adr, $this->login, $this->passe);
if (!$obj_db) {
echo '<div style="' . STYLE_MYSQL . '">Erreur de connexion à la base de données <b>' . $this->base . '</b></div>';
return false;
}
if (!mysql_select_db($this->base, $obj_db)) {
echo '<div style="' . STYLE_MYSQL . '">Erreur : ' . mysql_error( ) . '</div>';
mysql_close($obj_db);
return false;
}
return true;
}
else {
echo '<div style="' . STYLE_MYSQL . '">Erreur : aucune information de connexion - base de données indisponible</div>';
return false;
}
}
function close() {
// méthode publique
mysql_close();
}
[.....................]
function select($chaine_sql, $methode, $args=null, $connexion=true) {
if ($connexion) {
if (!$this->connexion()) return null;
}
........etc.
Autrement dit, la fonction connexion() est privée, donc appelée par toutes les autres (ex.: select(...)), mais par contre la fonction close() est publique. Quand dois-je me servir de la fonction close()? Autrement dit, dois-je fermer l'accès à ma BD à la fin de chacune de mes requêtes?
Tandis que j'y suis, j'ai également une autre classe qui fait appel à cette classe, c'est à dire que je l'importe. Je l'ai appelée ClasseGererBD.
De ma page php, j'instancie cette classe, ex: $bd = new ClasseGererBD.
Cela fonctionne, mais je ne peux qu'appeler une seule des méthodes de ma classe ClasseMysql. La seconde fois, j'obtiens:
Code : Tout sélectionner
Notice: Undefined variable: mysql_adresse in c:\...\ClasseMysql.txt on line 32
Notice: Undefined variable: mysql_login in c:\...\ClasseMysql.txt on line 33
Notice: Undefined variable: mysql_pass in c:\...\ClasseMysql.txt on line 34
Notice: Undefined variable: mysql_base in c:\...\ClasseMysql.txt on line 35
Erreur : aucune information de connexion - base de données indisponible
Bon, l'erreur est générée par ClasseMysql, mais je ne comprends pas pourquoi mes variables ne sont plus définies au second appel d'une méthode alors que tout fonctionnait au premier... L'erreur n'est pas dans la méthode elle-même, car le premier appel que je fais fontionne toujours, c'est le second qui bogue.
Bonjour!
J'aimerais savoir comment se gère l'ouverture et la fermeture de la connexion à une base de données mysql.
Je m'explique, j'utilise une classe pour gérer mes accès. J'ai deux fichiers (la source complète est [url=http://www.aidejavascript.com/article157.html]ici, tout en bas de la page[/url]). L'un est "connexion.php" (je n'écris pas mes données ici mais j'ai inscrit les valeurs approprées, bien sûr):
[code]<?php
$mysql_adresse = "localhost";
$mysql_login = "root";
$mysql_pass = "";
$mysql_base = "votre_base";
?>[/code]
L'autre est mysql.php, qui comprend entre autres:
[code] function connexion() {
// méthode privée
// connexion à la base de données
if ($this->base) {
$obj_db = mysql_connect($this->adr, $this->login, $this->passe);
if (!$obj_db) {
echo '<div style="' . STYLE_MYSQL . '">Erreur de connexion à la base de données <b>' . $this->base . '</b></div>';
return false;
}
if (!mysql_select_db($this->base, $obj_db)) {
echo '<div style="' . STYLE_MYSQL . '">Erreur : ' . mysql_error( ) . '</div>';
mysql_close($obj_db);
return false;
}
return true;
}
else {
echo '<div style="' . STYLE_MYSQL . '">Erreur : aucune information de connexion - base de données indisponible</div>';
return false;
}
}
function close() {
// méthode publique
mysql_close();
}
[.....................]
function select($chaine_sql, $methode, $args=null, $connexion=true) {
if ($connexion) {
if (!$this->connexion()) return null;
}
........etc.[/code]
Autrement dit, la fonction connexion() est privée, donc appelée par toutes les autres (ex.: select(...)), mais par contre la fonction close() est publique. Quand dois-je me servir de la fonction close()? Autrement dit, dois-je fermer l'accès à ma BD à la fin de chacune de mes requêtes?
Tandis que j'y suis, j'ai également une autre classe qui fait appel à cette classe, c'est à dire que je l'importe. Je l'ai appelée ClasseGererBD.
De ma page php, j'instancie cette classe, ex: $bd = new ClasseGererBD.
Cela fonctionne, mais je ne peux qu'appeler une seule des méthodes de ma classe ClasseMysql. La seconde fois, j'obtiens:
[code]Notice: Undefined variable: mysql_adresse in c:\...\ClasseMysql.txt on line 32
Notice: Undefined variable: mysql_login in c:\...\ClasseMysql.txt on line 33
Notice: Undefined variable: mysql_pass in c:\...\ClasseMysql.txt on line 34
Notice: Undefined variable: mysql_base in c:\...\ClasseMysql.txt on line 35
Erreur : aucune information de connexion - base de données indisponible[/code]
Bon, l'erreur est générée par ClasseMysql, mais je ne comprends pas pourquoi mes variables ne sont plus définies au second appel d'une méthode alors que tout fonctionnait au premier... L'erreur n'est pas dans la méthode elle-même, car le premier appel que je fais fontionne toujours, c'est le second qui bogue.