2010-11-04 3 views
0

J'ai, ce que je pense/espère, une question PHP très simple. J'ai fait une classe pour créer des connexions de base de données et émettre des requêtes communes. J'essaye d'ouvrir deux connexions différentes de base de données en créant deux objets de la même classe de base de données. Mon code est le suivant:PHP Database Class et new() Fonction

//connect to DB 
$dbh = new DB('localhost', 'db1', 'user', 'pass'); 

//check connection 
if(!$dbh->getStatus()) { 
    echo($dbh->getErrorMsg()); 
    die; 
}//if 

//connect to DB 2 
$dbh2 = new DB('localhost', 'db2', 'user', 'pass'); 

//check connection 
if(!$dbh2->getStatus()) { 
    echo($dbh2->getErrorMsg()); 
    die; 
}//if 

Cependant, quand je l'appelle une méthode pour $ dbh pour interroger la base de données, il tente d'interroger avec les informations d'identification pour dbh2 $.

constructeur Ma DB est ci-dessous:

class DB { 
    function __construct($host, $db, $user, $pass) { 
    $dbh = mysql_connect($host, $user, $pass); 
    mysql_select_db($db, $dbh); 

    if(!$dbh) { 
    $this->status = false; 
    $this->error_msg = 'Error connecting to database: '.mysql_error(); 
    return(false); 
    }//if 


    $this->dbh = $dbh; 
    $this->resetStatusAndErrors(); 
    return($dbh); 
    }//_construct 

Répondre

5

solution simple: Utiliser PDO à la place. Il fait exactement ce que vous voulez, a probablement une meilleure syntaxe et implémentation et résume l'interface pour l'accès à la base de données.

+1

+1. Ou dérivez votre propre classe de PDO. – dyve

+0

Y a-t-il un moyen d'utiliser PDO? La seule raison pour laquelle je demande est parce que je vais devoir réécrire beaucoup de code. Merci btw, va certainement utiliser PDO dans le futur. – user387049

+0

Commuté tout à PDO, fonctionne comme un charme! Merci encore. – user387049

2

Vous ne montrez pas la classe complète, mais la raison la plus probable est que vous ne passez pas la connexion en cours à la commande mysql_query().

Enregistrer $dbh comme propriété de votre classe, et ajoutez le paramètre connection à chaque fonction mysql_ qui l'accepte:

mysql_query("SELECT * from.......", $this->dbh); 

Cela dit, si vous construisez ce à partir de zéro au moment, jetez un oeil si vous ne voulez pas utiliser PDO à la place. C'est mieux, plus sûr et plus flexible que l'ancienne bibliothèque mySQL.

+0

Je passe $ this-> dbh à chaque mysql_query que je fais – user387049

+0

@user où définissez-vous '$ this-> dbh'? –

+0

privé $ dbh; Au bas de ma classe. – user387049

0

Si vous utilisez l'extension mysql (en utilisant mysqli ou PDO_MySQL donnerait à la fois des performances supérieures, plus de fonctionnalités, etc., afin de vérifier que pour le nouveau code), vous devrez stocker la poignée de base de données, et l'utilisation que sur chaque mysql_* appel:

class db { 
.... 
    function query($query){ 
     return mysql_query($query, $this->dbh);//notice the second parameter. 
    } 

}