Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Pertanyaan Merentas Pangkalan Data dalam 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!