Tôi muốn kết nối wpdb
với cơ sở dữ liệu khác. Làm cách nào để tạo cá thể và truyền tên cơ sở dữ liệu / tên người dùng / mật khẩu?
Cảm ơn
Tôi muốn kết nối wpdb
với cơ sở dữ liệu khác. Làm cách nào để tạo cá thể và truyền tên cơ sở dữ liệu / tên người dùng / mật khẩu?
Cảm ơn
Câu trả lời:
Vâng nó có thể.
Đối tượng wpdb có thể được sử dụng để truy cập bất kỳ cơ sở dữ liệu nào và truy vấn bất kỳ bảng nào. Tuyệt đối không cần phải liên quan đến Wordpress, điều này rất thú vị.
Lợi ích là khả năng sử dụng tất cả các lớp và chức năng của wpdb get_results
, v.v. để không cần phải phát minh lại bánh xe.
Đây là cách thực hiện:
$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
. Nhưng trước khi bắn phương thức $ wpdb-> get_results, bạn phải bao gồm wp-load.php như: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
Kết nối với cơ sở dữ liệu thứ hai rất dễ dàng trong WordPress, bạn chỉ cần tạo một phiên bản mới của lớp WPDB và sử dụng nó giống như cách bạn sẽ sử dụng ví dụ $ wpdb tiêu chuẩn mà chúng ta đều biết và yêu thích.
Giả sử cơ sở dữ liệu thứ hai có cùng thông tin đăng nhập như WP chính, bạn thậm chí có thể sử dụng các hằng số được xác định trước từ wp-config.php để tránh mã hóa thông tin đăng nhập.
/**
* 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_');
không ai nói điều này vì vậy tôi nghĩ tôi sẽ thêm một cách dễ dàng hơn nữa ..
miễn là cơ sở dữ liệu bổ sung của bạn có cùng chi tiết người dùng / thông qua để truy cập nó như cơ sở dữ liệu wordpress của bạn, bạn có thể sử dụng tên cơ sở dữ liệu trước tên bảng như thế này
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
. Bạn không thể chèn dữ liệu.
Mặc dù các tính năng này sẽ hoạt động, bạn sẽ mất khả năng sử dụng các tính năng tùy chỉnh "khác" như truy vấn get_post_custom và wordpress. Giải pháp đơn giản là
$wpdb->select('database_name');
làm thay đổi toàn bộ cơ sở dữ liệu (một mysql select_db). Phương thức database.table hoạt động nếu bạn chỉ muốn thực hiện một truy vấn đơn giản, nhưng nếu bạn muốn truy cập một blog wordpress khác, bạn có thể sử dụng select. Bạn sẽ chỉ cần thay đổi lại khi bạn hoàn thành hoặc blog của bạn có thể làm những điều kỳ lạ.
wp_get_post_terms()
không rõ dường như không sử dụng DB mới được chọn ?? Mọi chức năng khác mà tôi đã thử (như get_post_meta()
, get_posts()
v.v.) dường như chỉ hoạt động tốt nhưng wp_get_post_terms()
dường như hoạt động đối với DB_NAME
cơ sở dữ liệu. Có ý kiến gì không?
Tôi chưa thể bình luận, nhưng tôi muốn mở rộng câu trả lời của Wadih M. (rất hay).
Lớp cơ sở dữ liệu của WP là phiên bản tùy chỉnh của ezQuery của Justin Vincent. Nếu bạn thích giao diện và bạn muốn làm một trang web không dựa trên WordPress, bạn có thể muốn kiểm tra nó: http://justinvincent.com/ezsql
Tôi đã vật lộn với việc sử dụng $wpdb
để kết nối với cơ sở dữ liệu blog thứ hai từ một trang mẹ cần cập nhật hai blog. Tôi đã sử dụng $wpdb->select($dbname, $dbh)
để chọn cơ sở dữ liệu thứ hai, nhưng tôi vẫn nhận được kết quả từ cơ sở dữ liệu đầu tiên.
Tôi đã giải quyết vấn đề bằng cách gọi wp_cache_flush()
để xóa bộ đệm WordPress trước khi gọi các chức năng WP trên cơ sở dữ liệu thứ hai.