Iki veritabanlarına bağlantı

6 Cevap php

I have an application in which I want to authenticate a user from a first database & manage other activities from another database. I have created two classes. An object of the classes is defined in a file:

$objdb1=new db1(),$objdb2=new db2();

Ama aramaya çalıştığınızda $objdb1->fn(). Bu $objdb2 & dan arar tablo1 doesnot var gösteriliyor?

Benim ilk dosya database.php

class database
{
private $hostname;
private $database;
private $username;
private $password;
private $dblinkid;

function __construct()
{
    if($_SERVER['SERVER_NAME'] == 'localhost')
    {
        $this->hostname = "localhost";
        $this->database = "aaaa";
        $this->username = "xxx";
        $this->password = "";
    }
    else
    {
        $this->hostname = "localhost";
        $this->database = "xxx";
        $this->username = "xxx";
        $this->password = "xxx";
    }
    $this->dblinkid = $this->connect();
}

       protected function connect()
{
    $linkid = mysql_connect($this->hostname, $this->username, $this->password) or die("Could not Connect ".mysql_errno($linkid));
    mysql_select_db($this->database, $linkid) or die("Could not select database ".mysql_errno($linkid)) ;
    return $linkid;
}

Benzer şekilde ikinci dosya

class database2
{
private $vhostname;
private $vdatabase;
private $vusername;
private $vpassword;
private $vdblinkid;

function __construct()
{
    if($_SERVER['SERVER_NAME'] == 'localhost')
    {
        $this->vhostname = "xxx";
        $this->vdatabase = "bbbb";
        $this->vusername = "xxx";
        $this->vpassword = "";
    }
    else
    {
        $this->vhostname = "localhost";
        $this->vdatabase = "xxxx";
        $this->vusername = "xxxx";
        $this->vpassword = "xxxx";
    }
    $this->vdblinkid = $this->vconnect();
}

        protected function vconnect()
{
    $vlinkid = mysql_connect($this->vhostname, $this->vusername, $this->vpassword) or die("Could not Connect ".mysql_errno($vlinkid));
    mysql_select_db($this->vdatabase, $vlinkid) or die("Could not select database ".mysql_errno($vlinkid)) ;
    return $vlinkid;
}

Üçüncü dosya

$objdb1 = new database();
$objdb2 = new database2();

Bu konuda bana yardımcı olabilir misiniz?

Selamlar,

Pankaj

6 Cevap

Sınıfları bilmeden, yardım etmek zordur. Eğer PDO kullanıyorsanız, ben herhangi bir sorun olmadan farklı veritabanlarına bağlı birden çok örneğini oluşturabilirsiniz size garanti edemez. Eğer fonksiyonların mysql_ ailesini kullanıyorsanız muhtemelen sadece link_identifier parametresini (here bakınız) ayarlamak için unuttum.

Ancak sınıf db1 ve bir sınıf olan db2 Benim için bir kod koku gibi geliyor. Muhtemelen farklı özellikleri ile aynı sınıfın iki örneği var istiyorum.

Eğer mysql_connect () veya eşdeğer mysqli işlevlerini aramak her zaman, bir bağlantı zaten yeniden alır bu aynı kimlik bilgilerini kullanan varsa - böylece değişen veritabanı, chartsets'ten veya diğer mysql oturum değişkenleri de dahil olmak üzere bağlantının durumunu değiştirmek için yapılacak bir şey etkiler "ikisi de" bağlantıları.

Eğer mysql_connect () fonksiyonu kullanarak bu yana yeni bir bağlantısını her zaman zorlama seçeneği var ama bu tüm uzantıları (IIRC mysqli ve PDO bunun için alow yok) desteklenmiyor.

Ancak IMHO bu sorunu çözmek için yanlış bir yoldur. Sadece nereye bağlı ne takip çalışıyorum dağınık olur.

Doğru yolu her sorguda veritabanını belirtmek olacaktır:

 SELECT stuff FROM aaaa.first f, aaaa.second s
 WHERE f.something=s.something;

SERVER_NAME "localhost" olup olmadığını sorun kontrol olabilir. Hem derslerinde aynı bağlantı dizeleri kullanıyor olabilir gibi görünüyor. Çözümlüyor $ _SERVER ['SERVER_NAME'] nedir?

Bunu mevcut bağlantıları yeniden gerektiğini belirtiyor mysql_connect() dördüncü parametresi, arıyoruz:

$dbLink1 = mysql_connect($server, $user, $pass, true);
mysql_select_db($db1, $dbLink1);

$dbLink2 = mysql_connect($server, $user, $pass, true);
mysql_select_db($db2, $dbLink2);

mysql_query("SELECT * FROM table1", $dbLink1); // <-- Will work
mysql_query("SELECT * FROM table1", $dbLink2); // <-- Will fail, because table1 doesn't exists in $db2

Mysql_connect olarak true dördüncü parametre geçirerek sorunu giderir.

 $linkid = mysql_connect($this->hostname, $this->username, $this->password,true) or die("Could not Connect ".mysql_errno($linkid));