ฉันต้องการเชื่อมต่อwpdb
กับฐานข้อมูลอื่น ฉันจะสร้างอินสแตนซ์และส่งผ่านชื่อฐานข้อมูล / ชื่อผู้ใช้ / รหัสผ่านได้อย่างไร
ขอบคุณ
ฉันต้องการเชื่อมต่อwpdb
กับฐานข้อมูลอื่น ฉันจะสร้างอินสแตนซ์และส่งผ่านชื่อฐานข้อมูล / ชื่อผู้ใช้ / รหัสผ่านได้อย่างไร
ขอบคุณ
คำตอบ:
ใช่มันเป็นไปได้
วัตถุ wpdb สามารถใช้เพื่อเข้าถึงฐานข้อมูลใด ๆ และสอบถามตารางใด ๆ ไม่จำเป็นต้องเกี่ยวข้องกับ Wordpress แน่นอนซึ่งน่าสนใจมาก
ประโยชน์คือความสามารถในการใช้คลาส wpdb และฟังก์ชั่นเช่นget_results
ทั้งหมดดังนั้นจึงไม่จำเป็นต้องคิดค้นล้อใหม่อีกครั้ง
นี่คือวิธี:
$mydb = new wpdb('username','password','database','localhost');
$rows = $mydb->get_results("select Name from my_table");
echo "<ul>";
foreach ($rows as $obj) :
echo "<li>".$obj->Name."</li>";
endforeach;
echo "</ul>";
global $wpdb
คุณยังสามารถประหยัดเวลาโดยใช้ แต่ก่อนที่จะเริ่มวิธี $ wpdb-> get_results คุณต้องรวม wp-load.php เป็น: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
การเชื่อมต่อกับฐานข้อมูลที่สองนั้นเป็นเรื่องง่ายใน WordPress คุณเพียงแค่สร้างอินสแตนซ์ใหม่ของคลาส WPDB และใช้วิธีเดียวกับที่คุณจะใช้อินสแตนซ์ $ wpdb มาตรฐานที่เราทุกคนรู้จักและชื่นชอบ
การสมมติว่าฐานข้อมูลที่สองมีข้อมูลล็อกอินเหมือนกับ WP หลักหนึ่งคุณสามารถใช้ค่าคงที่ที่กำหนดไว้ล่วงหน้าจาก wp-config.php เพื่อหลีกเลี่ยงการเข้ารหัสข้อมูลการล็อกอิน
/**
* Instantiate the wpdb class to connect to your second database, $database_name
*/
$second_db = new wpdb(DB_USER, DB_PASSWORD, $database_name, DB_HOST);
/**
* Use the new database object just like you would use $wpdb
*/
$results = $second_db->get_results($your_query);
$second_db->set_prefix('wp_');
ไม่มีใครพูดเรื่องนี้ดังนั้นฉันคิดว่าฉันจะเพิ่มวิธีที่ง่ายยิ่งขึ้น ..
ตราบเท่าที่ฐานข้อมูลเพิ่มเติมของคุณมีรายละเอียดผู้ใช้ / รหัสผ่านเดียวกันเพื่อเข้าถึงฐานข้อมูลของคุณคุณสามารถใช้ชื่อฐานข้อมูลหน้าชื่อตารางเช่นนี้
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
ข้อมูลเช่นการใช้ คุณไม่สามารถแทรกข้อมูล
แม้ว่าสิ่งเหล่านี้จะใช้งานได้คุณจะสูญเสียความสามารถในการใช้คุณสมบัติที่กำหนดเอง "อื่น ๆ " เช่น get_post_custom และแบบสอบถาม wordpress ทางออกที่ง่ายคือ
$wpdb->select('database_name');
ซึ่งเปลี่ยนระบบฐานข้อมูลทั่วทั้งระบบ (a mysql select_db) เมธอด database.table ทำงานได้ถ้าคุณต้องการสร้างคิวรีแบบง่ายๆ แต่ถ้าคุณต้องการเข้าถึงบล็อก WordPress อื่นคุณสามารถใช้ select คุณเพียงแค่ต้องเปลี่ยนกลับเมื่อคุณทำเสร็จมิฉะนั้นบล็อกของคุณอาจทำสิ่งที่แปลก
wp_get_post_terms()
ดูเหมือนจะไม่ใช้ฐานข้อมูลที่เลือกใหม่ ทุกฟังก์ชั่นอื่น ๆ ที่ฉันได้พยายาม (เช่นget_post_meta()
, get_posts()
ฯลฯ ) ดูเหมือนว่าจะทำงานได้ดี แต่wp_get_post_terms()
ดูเหมือนว่าจะทำงานต่อDB_NAME
ฐานข้อมูล ความคิดใด ๆ
ฉันยังไม่สามารถแสดงความคิดเห็นได้ แต่ฉันต้องการขยายคำตอบของ Wadih M. (ซึ่งยอดเยี่ยม)
คลาสฐานข้อมูลของ WP เป็น ezSQL รุ่นที่กำหนดเองของ Justin Vincent หากคุณชอบอินเทอร์เฟซและคุณต้องการทำเว็บไซต์ที่ไม่ได้ใช้เวิร์ดเพรสคุณอาจต้องการลองดู: http://justinvincent.com/ezsql
ฉันพยายามใช้$wpdb
เพื่อเชื่อมต่อกับฐานข้อมูลบล็อกที่สองจากไซต์แม่ที่ต้องการอัปเดตสองบล็อก ฉันเคย$wpdb->select($dbname, $dbh)
เลือกฐานข้อมูลที่สอง แต่ฉันยังคงได้รับผลลัพธ์จากฐานข้อมูลแรก
ฉันแก้ไขปัญหาด้วยการโทรwp_cache_flush()
เพื่อล้างแคช WordPress ก่อนเรียกฟังก์ชั่น WP ในฐานข้อมูลที่สอง