2009-10-19 8 views
0

Donc j'essaye de créer une classe de base de données mysql, et je veux garder ma sélection db dans une méthode séparée du constructeur. Pour une raison quelconque, la fonction setDb() ne veut pas fonctionner.Mysql db class - problème de connexion

class mysql 
{ 
    public function __construct($server,$user,$pass) 
{ 
    if(!$this->mysql_connection = mysql_connect($server,$user,$pass)) 
     print 'Could not connect to MySQL'; 
} 

    public function setDb($dbname) 
{ 
    $this->database = $dbname; 
    if(!mysql_select_db($this->database,$this->mysql_connection)) 
     $this->database = ''; 
     print 'Could not connect to the MySQL database'; 
     return false; 
    return true; 
} 

    private $database; 
private $mysql_connection; 
} 
+0

plutôt que vos déclarations d'impression et retour, vous voudrez peut-être essayer de mourir() pour vous assurer que vous n'êtes pas manque un message d'erreur. Aussi, comment appelez-vous votre classe mysql? –

+0

die (mysql_error()) doit cracher les détails de l'erreur – Tim

+0

Avez-vous envisagé d'utiliser/d'étudier des couches d'accès à la base de données existantes et/ou des abstractions - comme par ex. http://docs.php.net/pdo, http://adodb.sourceforge.net, http: //www.doctrine-project.org, ... beaucoup, beaucoup plus - avant d'essayer le vôtre? – VolkerK

Répondre

0

Je ne vois aucun problème flagrant. Appelez-vous votre classe comme ci-dessous?

$db = new mysql($server, $user, $password); 
$db->setDb('YOUR_DATABASE_NAME'); 
0

Vous devez ajouter des accolades après votre ligne mysql_select_db, et avant le retour véritable ligne. Seule la première instruction sous la condition est exécutée lorsque la condition est remplie. Donc, la fonction renvoie toujours false.

1

Vous pouvez lever une exception en cas d'erreur MySQL, par ex.

class DbMySQL 
{ 
    protected $database; 
    protected $mysql_connection; 

    public function __construct($server,$user,$pass) 
    { 
    $this->mysql_connection = mysql_connect($server,$user,$pass); 
    if(!$this->mysql_connection) { 
     throw new ErrorException(mysql_error(), mysql_errno()); 
    } 
    } 

    public function setDb($dbname) 
    { 
    if (!mysql_select_db($dbname, $this->mysql_connection)) { 
     throw new ErrorException(mysql_error($this->mysql_connection), mysql_errno($this->mysql_connection)); 
    } 
    else { 
     $this->database = $dbname; 
    } 
    return $this; 
    } 
} 

$m = new DbMySQL('localhost', '...', '...'); 
$m->setDB('...'); 

Peut-être ErrorException() est pas le meilleur choix, mais je l'espère, vous obtenez l'idée ;-)