Nasıl tek bir web sayfasında çoklu MySQL veritabanlarına bağlanmak mı?

7 Cevap php

Ben bilgileri birkaç veritabanları arasında yayılmış ve PHP kullanarak bir web sayfası üzerine tüm bilgileri koymak istiyorsunuz. Ben tek bir PHP web sayfasında birden fazla veritabanlarına bağlanmak nasıl merak edildi.

Ben kullanarak tek bir veritabanına bağlanmak için biliyorum:

$dbh = mysql_connect($hostname, $username, $password) 
        or die("Unable to connect to MySQL");

Ancak, sadece birden çok "mysql_connect" kullanabilirsiniz diğer veritabanlarını açmak komutları ve nasıl gibi bilgiler bağlanan birden fazla veritabanı var mı varsa çekti istediğini veritabanı biliyorum PHP olacaktır.

7 Cevap

Sen mysql_connect() için birden fazla görüşme yapabilirsiniz, ancak parametreleri aynı eğer, aksi takdirde aynı bağlantının yeniden, '$new_link' (dördüncü) parametresi için true geçmek gerekir.

Eğer öyleyse o zaman var

$dbh1 = mysql_connect($hostname, $username, $password); 
$dbh2 = mysql_connect($hostname, $username, $password, true); 

mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);

Sonra bunu, veritabanı 1 sorgulamak için:

mysql_query('select * from tablename', $dbh1);

ve veritabanı 2 için:

mysql_query('select * from tablename', $dbh2);

Mysql kullanıcı hem de veritabanlarına erişim vardır ve onlar aynı host üzerinde ise Alternatif olarak, olabilir (yani her iki DBs aynı MySQL bağlantısından erişilebilir):

  • Açık bir bağlantı tutun ve aralarında değiş tokuş etmek için mysql_select_db() aramaya devam. Ben bu temiz bir çözüm olduğunu düşünmüyorum ve kolayca vb db yanlış sorgulamak davaları alacak
  • Eğer veritabanı adı (örneğin, SELECT * FROM database2.tablename) belirtmek nerede sorguları kullanın, ama bu tekrar uygulamak için bir ağrı olması muhtemeldir.

Muhtemelen daha iyi bir yaklaşımdır çünkü Ayrıca PDO kullanarak yerine yaklaşık troelskn cevabını okudum.

Eğer (PHP4 onaylanmaz verilen Ve sen-meli,) PHP5 kullanıyorsanız bu yavaş yavaş yeni standart haline geliyor, çünkü sen, PDO kullanmalısınız. PDO'nun Bir (çok) önemli yararı, çok daha güvenli kod yapar bağlı parametreleri destekler olmasıdır.

Bu gibi PDO'de üzerinden bağlanmak istiyorum:

try {
  $db = new PDO('mysql:dbname=databasename;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
  echo 'Connection failed: ' . $ex->getMessage();
}

(Tabii ki yukarıda databasename, kullanıcı adınızı ve şifrenizi değiştirin)

Daha sonra bu gibi veritabanını sorgulayabilirsiniz:

$result = $db->query("select * from tablename");
foreach ($result as $row) {
  echo $row['foo'] . "\n";
}

Veya, değişkenleri varsa:

$stmt = $db->prepare("select * from tablename where id = :id");
$stmt->execute(array(':id' => 42));
$row = $stmt->fetch();

Eğer aynı anda birden fazla bağlantı gerekiyorsa, sadece PDO birden çok örneğini oluşturabilirsiniz:

try {
  $db1 = new PDO('mysql:dbname=databas1;host=127.0.0.1', 'username', 'password');
  $db2 = new PDO('mysql:dbname=databas2;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
  echo 'Connection failed: ' . $ex->getMessage();
}

Aşağıdaki kodu deneyin:

    $conn = mysql_connect("hostname","username","password");
    mysql_select_db("db1",$conn);
    mysql_select_db("db2",$conn);

    $query1 = "SELECT * FROM db1.table";
    $query2 = "SELECT * FROM db2.table";

Aşağıdaki gibi iki veritabanından Yukarıdaki sorgu veri getirebilir

$rs = mysql_query($query1);
while($row = mysql_fetch_assoc($rs)) {
    $data1[] = $row;
}

$rs = mysql_query($query2);
while($row = mysql_fetch_assoc($rs)) {
    $data2[] = $row;
}

print_r($data1);
print_r($data2);

Ayrıca etrafında birçok veritabanı soyutlama araçlarından biri de bir göz atmak isteyebilirsiniz. Ancak onlar genelde aynı şeyi yapacak, aynı anda birden fazla açık bağlantıları tutmak için tarif tom.

Eğer gerçekten oyunda bir PDO nesnesinin birden fazla örneği olması gerekir yoksa, aşağıdakileri dikkate alın:

$con = new PDO('mysql:host=localhost', $username, $password, 
      array(PDO::ATTR_PERSISTENT => true));

Inşaat argümanları dbname= yokluğunu dikkat edin.

Eğer bir terminal veya diğer aracı ile MySQL bağlandığınızda, veritabanı adı yarasa kapalı gerekli değildir. Sen PDO::exec() metodu ile USE dbname deyimini kullanarak veritabanları arasında geçiş yapabilirsiniz.

$con->exec("USE someDatabase");
$con->exec("USE anotherDatabase");

Tabii ki bir catch try açıklamada bu kaydırmak isteyebilirsiniz.

Ben sadece hayatımı basit yaptı:

CREATE VIEW another_table AS SELECT * FROM another_database.another_table;

yararlı olduğunu umuyoruz ... şerefe ...

$dbh1 = mysql_connect($hostname, $username, $password); $dbh2 = mysql_connect($hostname, $username, $password, true);

mysql_select_db('database1', $dbh1); mysql_select_db('database2', $dbh2); Then to query database 1, do this:

mysql_query ($ dbh1 'tabloismi SELECT * from'); ve veritabanı 2 için:

mysql_query ($ dbh2 'tabloismi SELECT * from');

Bu kullandığım en belirgin çözümdür ama veritabanı hem kullanıcı adı / parola aynı konakta, bu çözüm her zaman ilk bağlantıyı kullanarak olacak tam olarak aynı ise sadece hatırlıyorum. Yani bu böyle bir durumda çalışma olmadığını karıştırılmamalıdır olmayın. Yapmanız gereken, olan 2 veritabanları için 2 farklı kullanıcılar oluşturabilir ve bu iş olacak.