Verificando se existe uma tabela de banco de dados

8

Eu li o códice wordpress e o wordpress profissional. Parece que ambos usam algo como

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

para determinar se a tabela existe. Existe alguma razão pela qual CREATE TABLE IF NOT EXISTS ( ... ) não é usado? Ele irá verificar e criar a tabela em uma consulta, não será melhor? Ou estou faltando alguma coisa?

    
por JM at Work 10.03.2011 / 06:45

4 respostas

9

Se você usar "IF NOT EXISTS", o script dbdelta não atualizará seu banco de dados com o delta que aparece após a criação inicial do banco de dados.

(supondo que você queira reutilizar o mesmo script sql)

pelo menos ... é isso que eu acho

    
por edelwater 12.03.2011 / 01:56
4

AVISO LEGAL: Eu não sou um WordPress Guru, apenas um DBA MySQL

Se você deseja usar uma consulta diferente, tente isso

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

Ele retornará 0 (se a tabela não existir) ou 1 (se a tabela existir)

    
por RolandoMySQLDBA 22.04.2011 / 08:46
1

Essa consulta, quando executada, sempre cria logs para o erro do banco de dados. Ele funciona bem quando a tabela existe, mas quando isso não acontece, gera os logs de depuração abaixo.

Qualquer forma alternativa de verificar se a tabela do banco de dados existe ou evitar que esses erros preencham o arquivo de logs de depuração?

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

Logs de depuração:

[09-Sep-2018 12:21:50 UTC] WordPress database error Table 'splivemain_db.wp_survey_popup_form' doesn't exist for query DESCRIBE wp_survey_popup_form; made by do_action('omxl-logger_page_omxl-cf7'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, myplugin__Logger->display, myplugin__Logger->get_columns

[09-Sep-2018 12:21:50 UTC] WordPress database error Table 'splivemain_db.wp_survey_popup_form' doesn't exist for query DESCRIBE wp_survey_popup_form; made by do_action('omxl-logger_page_omxl-cf7'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, myplugin__Logger->display, myplugin__Logger->get, myplugin__Logger->get_columns

[09-Sep-2018 12:21:50 UTC] WordPress database error Table 'splivemain_db.wp_survey_popup_form' doesn't exist for query SELECT* FROM wp_survey_popup_form WHERE 1=1 ORDER BY activity_date DESC LIMIT 0, 10 made by do_action('omxl-logger_page_omxl-cf7'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, myplugin__Logger->display, myplugin__Logger->get
    
por OmAk 09.09.2018 / 14:24
0

Não sei como ou por que isso funciona, mas posso fazer isso:

if (in_array('snippets', $wpdb->tables)) {
  // do something if wp_snippets exists
}
    
por iSWORD 18.09.2018 / 18:05