Создание двух таблиц базы данных через плагин

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

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

Это оператор my 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') ), то ваш плагин установлен, и вам не нужно запускать сценарии базы данных.
  • Если этого параметра нет, запустите сценарии и установите параметр, чтобы вы не запускали их дважды.

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