Вопрос

Я работаю над плагином для голосования для своего сайта, и я хочу создать 2 таблицы: один, который хранит голоса, а другой - хранит IPS избирателей.

В Codex он предлагает использовать оператор IF, чтобы увидеть, была ли таблица уже создана при установке плагина, но как я могу изменить код, если я создаю 2 таблицы?

Это мой оператор IF в функции установки плагина, в настоящее время установленная для проверки, существует ли 1 таблица.

...

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

....

Как правильный способ проверить, существуют ли обе таблицы?

Это было полезно?

Решение

Основные методы программирования, которые вы должны были выучить перед созданием плагина:

  1. Вы можете объединить проверки с && (и) и || (или же).
  2. Вы можете (и должны) охранять каждого CREATE запрос с собственной чеком

Синтаксис SQL, который вы должны были рассмотреть, прежде чем писать запросы самостоятельно:

На соответствующем примечании, пожалуйста, убедитесь, что вы удалите эти таблицы, когда плагин удален/удален.

PS: без обид. делает Похоже, вы копируете вставленные, не зная, что делает код. Пожалуйста, имейте в виду, что, делая это в плагине, вы рискуете инсталляциями других людей!

Другие советы

Я только бегнул на ваш код, но вы по крайней мере три выпуска.

Первый связан с безопасностью:

CREATE TABLE " . $table_name1 . "

Вы никогда не знаете, какую мусор может получить ваша функция, так что лучше напишите так:

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

Второе связано с SQL и уже выделено:

CREATE TABLE

Должно быть:

CREATE TABLE IF NOT EXISTS

Последнее и самое важное связано с синтаксисом PHP. Второй звонок:

$sql =

Должно быть:

$sql .=

Иначе вы никогда не создадите первую таблицу. Всегда.

Наконец, как указывалось в предыдущем сообщении, это хорошая практика, чтобы хранить версию вашего плагина или его таблиц, в какой -то степени. Это позволяет обновлять его легче, когда его собственные варианты и схема изменяются.

Если вы используете уникальные имена таблиц, вы можете с достаточной уверенностью предположить, что таблица 2 существует, если таблица 1 существует. Поэтому я бы проверил существование 1 и, если оно там, пропустите сценарии ... если это не так, запустите сценарии.

Вы также можете вывести опцию, которую вы установили для своего плагина:

  • Если вариант существует (т.е. get_option('my-voting-version')) затем установлен ваш плагин, и вам не нужно запускать сценарии базы данных.
  • Если опция нет, запустите свои сценарии и установите опцию, чтобы вы не запускали их дважды.

Даже если плагин будет удален, опция останется таким, когда он будет реактивирован, вы не будете переписывать таблицы. Хранение версии базы данных и запуск сценариев на основе этого также дает вам возможность управления обновлениями. Затем вы можете выборочно запустить сценарии обновления на основе того, какая табличная версия ранее существовала для сайта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top