Kiểm tra nếu Bảng cơ sở dữ liệu tồn tại


9

Tôi đọc codpress wordpress và wordpress chuyên nghiệp. Có vẻ như cả hai đều sử dụng một cái gì đó như

if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {

để xác định nếu bảng tồn tại. Có bất kỳ lý do tại sao CREATE TABLE IF NOT EXISTS ( ... )không được sử dụng? Nó sẽ kiểm tra và tạo bảng trong 1 truy vấn, liệu nó có tốt hơn không? Hay tôi đang thiếu một cái gì đó?

Câu trả lời:


10

Nếu bạn sử dụng "NẾU KHÔNG EXISTS" thì tập lệnh dbdelta sẽ không nâng cấp cơ sở dữ liệu của bạn với delta được xuất hiện sau khi tạo cơ sở dữ liệu ban đầu.

(giả sử bạn muốn sử dụng lại tập lệnh sql tương tự)

ít nhất ... đó là những gì tôi nghĩ


5

TUYÊN BỐ TỪ CHỐI: Tôi không phải là Chuyên gia WordPress, chỉ là một DBA của MySQL

Nếu bạn muốn sử dụng một truy vấn khác, hãy thử điều này

SELECT COUNT(1) FROM information_schema.tables WHERE table_schema='dbname' AND table_name='tbname';

Nó sẽ trả về 0 (nếu bảng không tồn tại) hoặc 1 (nếu bảng không tồn tại)


3

Hãy thử cái này:

global $wpdb;
$table_name = $wpdb->base_prefix.'custom_prices';
$query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) );

if ( ! $wpdb->get_var( $query ) == $table_name ) {
    // go go
}

1
Vui lòng chỉnh sửa câu trả lời của bạn và thêm một lời giải thích: tại sao điều đó có thể giải quyết vấn đề?
fuxia

1

Không chắc làm thế nào hoặc tại sao điều này hoạt động, nhưng tôi có thể làm:

if (in_array('snippets', $wpdb->tables)) {
  // do something if wp_snippets exists
}

2
điều này chỉ hoạt động cho các bảng cốt lõi như tôi tìm thấy trong khi thử nghiệm
Manchumahara

nó hoạt động với tôi để phát hiện bảng của plugin Code Snippets.
iSWORD

0

Sử dụng get_varchức năng từ wpdblớp với một xử lý ngoại lệ:

try {
    $wpdb->hide_errors();
    $wpdb->get_var( 'SELECT COUNT(*) FROM ' . $wpdb->prefix . 'translator' );
    $wpdb->show_errors();
} catch (Exception $e) {
    error_log($e);
} finally {
    translator_create_db();
}

Tham khảo: CHỌN một biến

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.