Pregunta

Estoy trabajando en un plugin de votación para mi sitio y quiero crear 2 tablas:. Uno que almacena los votos y otra que ips tiendas de votantes

En el Codex se sugiere utilizar una sentencia if para ver si la tabla ya se ha creado al instalar el plugin, pero ¿cómo puedo modificar el código si estoy creando 2 mesas?

Esta es mi declaración si la función en el plugin instalar, configurar actualmente para comprobar si 1 tabla ya existe.

...

   $table_name1 = $wpdb->prefix . "voters_ip";
   $table_name2 = $wpdb->prefix . "vote_posts";
   $installed_ver = get_option( "postvote_version" );  

   if($wpdb->get_var("show tables like '$table_name'") != $table_name1) { //unsure how to add both tables

      $sql = "CREATE TABLE " . $table_name1 . " (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      vote_post_id bigint(20) NOT NULL,
      voter_ip varchar(100) NOT NULL,
      UNIQUE KEY id (id)
    );";

      $sql = "CREATE TABLE " . $table_name2 . " (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      vote_post_id bigint(20) NOT NULL,
      up int(11) NOT NULL,
      ddown int(11) NOT NULL,
      UNIQUE KEY id (id)
    );";

      require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
      dbDelta($sql);

      add_option("postvote_version", $postvote_version);
   }

....

¿Cuál es la forma correcta para comprobar si existen ambas tablas?

¿Fue útil?

Solución

Técnicas básicas que debería haber aprendido la programación antes de construir un plugin:

  1. Se puede concatenar con cheques && (y) y || (O).
  2. Usted puede (y debe) proteger cada consulta CREATE con su propia verificación

SQL sintaxis que debería haber estudiado antes de escribir las preguntas sobre su propia:

En una nota relacionada, por favor asegúrese de que elimina estas tablas cuando el plugin es desinstalado / suprimido .

PS: Sin ánimo de ofender, pero hace mirada como si copia pegada sin saber lo que hace el código. Tenga en cuenta que al hacer esto en un plugin se arriesga a instalaciones de otras personas!

Otros consejos

Sólo tomó un rápido vistazo a su código, pero has lo menos tres problemas.

La primera está relacionada con la seguridad:

CREATE TABLE " . $table_name1 . "

Nunca se sabe qué tipo de basura podría recibir su función, así que es mejor que escribir así:

CREATE TABLE `" . str_replace('`', '', $table_name1) . "`

El segundo es SQL relacionados y ya destacó:

CREATE TABLE

En caso de ser:

CREATE TABLE IF NOT EXISTS

La última y más importante es la sintaxis de PHP relacionado. La segunda llamada a:

$sql =

En caso de ser:

$sql .=

Otra cosa que nunca se va a crear la primera tabla. Nunca.

Por último, como a cabo en punta en un mensaje anterior, es una buena práctica para almacenar la versión de su plug-in, o de sus mesas, en una opción. Esto permite actualizar más fácilmente cuando sus propias opciones, y su esquema, el cambio.

Si está utilizando nombres de tabla único, puede suponer con una buena cantidad de confianza en que el cuadro 2 existe si existe la tabla 1. Por lo que sólo comprobaría la existencia de 1 y, si está allí, omita los guiones ... si no lo es, ejecutar los scripts.

También puede introducir una opción de configurar para su plug-in:

  • Si existe la opción (es decir get_option('my-voting-version')) entonces su plug-in está instalado y que no es necesario para ejecutar las secuencias de comandos de base de datos.
  • Si la opción no está allí, ejecutar secuencias de comandos y establecer la opción para que no se ejecute dos veces.

Incluso si el plug-in se retira, la opción seguirá siendo así cuando se reactivó que no se re-escribir las tablas. Almacenamiento de la versión base de datos y ejecutar secuencias de comandos en base a que también le da el poder de gestión de actualizaciones. A continuación, puede ejecutar selectivamente scripts de actualización basado en la versión de mesa existido previamente para el sitio.

Licenciado bajo: CC-BY-SA con atribución
scroll top