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?

JM di Tempat Kerja
sumber

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

edelwater
sumber
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)

RolandoMySQLDBA
sumber
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
}
Raximjon Komiljonov
sumber
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
}
iSWORD
sumber
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

Marcos Rezende
sumber