Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Pertanyaan Merentas Pangkalan Data dalam PHP?

Bagaimana untuk Melaksanakan Pertanyaan Merentas Pangkalan Data dalam PHP?

Patricia Arquette
Patricia Arquetteasal
2024-11-10 12:42:02324semak imbas

How to Perform Cross-Database Queries in PHP?

Pertanyaan Merentas Pangkalan Data dalam PHP: Panduan Komprehensif

Artikel ini menangani isu membina pertanyaan silang pangkalan data dalam PHP, satu masalah yang sebelum ini diterokai dalam konteks MySQL. Walaupun berjaya mencapai pertanyaan silang pangkalan data dalam MySQL, pengarang menemui kegagalan apabila cuba meniru proses dalam PHP.

Secara khusus, pengarang mempersoalkan batasan yang dikenakan oleh mysql_select_db untuk menggunakan hanya satu pangkalan data pada satu masa, menjadikan pertanyaan silang pangkalan data tidak praktikal. Selain itu, alternatif untuk menentukan pangkalan data untuk setiap pertanyaan dianggap membosankan.

Pertanyaan Merentas Pangkalan Data dalam PHP

Mengatasi batasan mysql_select_db, penulis menerima penyelesaian yang membolehkan pangkalan data silang langsung joins:

$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
");

Dalam contoh ini, pangkalan data yang dinyatakan dalam mysql_select_db menjadi pangkalan data lalai untuk skrip. Walau bagaimanapun, pertanyaan boleh menentukan jadual daripada pangkalan data yang berbeza dengan merujuknya secara manual dengan nama pangkalan data yang sesuai, seperti yang dilihat dengan another_db.table_on_another_db.

Pendekatan Alternatif untuk Hos Berbeza

Jika pangkalan data berada pada hos yang berbeza, sambungan langsung menjadi mustahil. Sebaliknya, pendekatan dua pertanyaan disyorkan:

$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);

Kaedah ini melibatkan membuat dua pertanyaan berasingan: satu pada setiap pangkalan data. Pertanyaan pertama mendapatkan semula id rekod yang memenuhi kriteria dalam pangkalan data pertama. Id ini kemudiannya digunakan sebagai penapis untuk pertanyaan kedua, yang mengambil rekod yang sepadan daripada pangkalan data kedua.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pertanyaan Merentas Pangkalan Data dalam PHP?. 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