Verificando se existe tabela de banco de dados

11

Eu li o codex wordpress e 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 para CREATE TABLE IF NOT EXISTS ( ... )não ser usado? Ele irá verificar e criar a tabela em 1 consulta, não será melhor? Ou eu estou esquecendo de alguma coisa?

JM no Trabalho
fonte

Respostas:

10

Se você usar "SE NÃO EXISTE", o script dbdelta não atualizará seu banco de dados com o delta exibido após a criação inicial do banco de dados.

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

pelo menos ... é o que eu acho

Edelwater
fonte
5

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

Se você deseja usar uma consulta diferente, tente este

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)

RolandoMySQLDBA
fonte
3

Tente este:

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
fonte
11
Por favor edite sua resposta , e adicionar uma explicação: por que isso poderia resolver o problema?
fuxia
1

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

if (in_array('snippets', $wpdb->tables)) {
  // do something if wp_snippets exists
}
iSWORD
fonte
2
isso só funciona para tabelas do núcleo que eu encontrar durante o teste
Manchumahara
funcionou para mim na detecção da tabela do plug-in de trechos de código.
iSWORD 7/03/19
0

Use a get_varfunção da wpdbclasse com um tratamento de exceção:

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

Referência: SELECT a Variable

Marcos Rezende
fonte