Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah saya boleh melakukan pertanyaan pangkalan data silang dalam PHP dengan berbilang pangkalan data pada hos yang sama?

Bagaimanakah saya boleh melakukan pertanyaan pangkalan data silang dalam PHP dengan berbilang pangkalan data pada hos yang sama?

Susan Sarandon
Susan Sarandonasal
2024-11-10 20:28:03542semak imbas

How can I perform cross database queries in PHP with multiple databases on the same host?

Pertanyaan Silang Pangkalan Data dalam PHP

Dalam artikel sebelumnya, kami meneroka pembinaan pertanyaan pangkalan data silang dalam MySQL. Walaupun pendekatan ini berfungsi dengan berkesan dalam MySQL, aplikasi langsungnya dalam PHP terbukti mencabar. Khususnya, penggunaan mysql_select_db dalam PHP menimbulkan had apabila cuba mengakses berbilang pangkalan data.

Pilihan dan Had

Dua pilihan utama yang tersedia apabila menggunakan mysql_select_db ialah:

  1. Mengehadkan akses kepada pangkalan data tunggal, menghalang pertanyaan silang pangkalan data.
  2. Mengabaikan mysql_select_db, yang memerlukan penetapan pangkalan data untuk setiap pertanyaan.

Kedua-dua pilihan ini tidak sejajar dengan matlamat untuk melaksanakan pertanyaan silang pangkalan data tanpa perubahan yang sukar pada kod sedia ada.

Penyelesaian: Konfigurasi Hos Sama

Untuk menangani isu ini, pangkalan data anda mesti berada pada hos yang sama. Ini membolehkan anda menentukan pangkalan data asing secara manual sambil mengekalkan sambungan ke pangkalan data lalai pilihan anda.

$db = mysql_connect($host, $user, $password);
mysql_select_db('my_most_used_db', $db);

$q = mysql_query("
    SELECT *
    FROM   table_on_default_db a, `another_db`.`table_on_another_db` b
    WHERE  a.id = b.fk_id
");

Penyelesaian Ganti: Hos Asingkan

Jika pangkalan data anda tinggal di hos yang berbeza, penyertaan langsung tidak boleh dilakukan. Dalam senario ini, anda boleh melaksanakan pertanyaan berasingan kepada hos tertentu:

$db1 = mysql_connect($host1, $user1, $password1);
$db2 = mysql_connect($host2, $user2, $password2);

$q1 = mysql_query("
    SELECT id
    FROM   table
    WHERE  [..your criteria for db1 here..]
", $db1);
$tmp = array();
while($val = mysql_fetch_array($q1))
    $tmp[] = $val['id'];

$q2 = mysql_query("
    SELECT *
    FROM   table2
    WHERE  fk_id in (".implode(', ', $tmp).")
", $db2);

Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan pertanyaan pangkalan data silang dalam PHP dengan berbilang pangkalan data pada hos yang sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn