Comprobando si la tabla de base de datos existe


11

Leo el codex de wordpress y el wordpress profesional. Parece que ambos usan algo como

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

para determinar si existe la tabla. ¿Hay alguna razón por la CREATE TABLE IF NOT EXISTS ( ... )que no se usa? Verificará y creará la tabla en 1 consulta, ¿no será mejor? ¿O me estoy perdiendo algo?

Respuestas:


10

Si usa "SI NO EXISTE", el script dbdelta no actualizará su base de datos con los delta aparecidos después de la creación inicial de la base de datos.

(suponiendo que desea reutilizar el mismo script sql)

al menos ... eso es lo que pienso


5

DESCARGO DE RESPONSABILIDAD: no soy un gurú de WordPress, solo un DBA MySQL

Si desea utilizar una consulta diferente, intente esto

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

Devolverá 0 (si la tabla no existe) o 1 (si la tabla existe)


3

Prueba 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
}

1
Por favor, editar su respuesta , y añadir una explicación: ¿por qué podría que resolver el problema?
fuxia

1

No estoy seguro de cómo o por qué funciona esto, pero puedo hacer:

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

2
esto solo funciona para las tablas principales como encuentro durante las pruebas
Manchumahara

funcionó para mí para detectar la tabla del complemento de fragmentos de código.
iSWORD

0

Utilice la get_varfunción de la wpdbclase con un manejo de excepción:

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

Referencia: SELECCIONE una variable

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.