Memeriksa apakah Tabel Database ada


11

Saya membaca kodeks wordpress dan wordpress profesional. Sepertinya keduanya menggunakan sesuatu seperti

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

untuk menentukan apakah tabel ada. Apakah ada alasan mengapa CREATE TABLE IF NOT EXISTS ( ... )tidak digunakan? Ini akan memeriksa dan membuat tabel dalam 1 kueri, bukankah lebih baik? Atau apakah saya melewatkan sesuatu?

Jawaban:


10

Jika Anda menggunakan "JIKA TIDAK ADA" maka skrip dbdelta tidak akan memutakhirkan basis data Anda dengan delta yang muncul setelah pembuatan awal basis data.

(dengan asumsi Anda ingin menggunakan kembali skrip sql yang sama)

setidaknya ... itulah yang saya pikirkan


5

PENOLAKAN: Saya bukan WordPress Guru, hanya MySQL DBA

Jika Anda ingin menggunakan kueri yang berbeda, coba ini

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

Ini akan mengembalikan 0 (jika tabel tidak ada) atau 1 (jika tabel memang ada)


3

Coba yang ini:

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
Harap edit jawaban Anda , dan tambahkan penjelasan: mengapa itu bisa menyelesaikan masalah?
fuxia

1

Tidak yakin bagaimana atau mengapa ini bekerja, tetapi saya dapat melakukannya:

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

2
ini hanya berfungsi untuk tabel inti seperti yang saya temukan saat pengujian
Manchumahara

itu berhasil bagi saya untuk mendeteksi tabel plugin Snippets Code.
iSWORD

0

Gunakan get_varfungsi dari wpdbkelas dengan penanganan pengecualian:

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();
}

Referensi: PILIH a Variabel

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.