Intereting Posts
Добавить содержимое в заголовок виджета в области администратора внутри виджета? Обновлено с 4.6.1 до WordPress 4.7.2 Элемент меню отсутствует Разбиение страницы для плагина списка категорий Отображение подкатегории Имя / Ссылка Вместо родительской категории Изменить видимость на приватную Добавить контент по умолчанию для сообщений в определенной категории? Добавить тег местоположения в сообщения WordPress WP_Query внутри существующего wp_query останавливает следующую запись, показывающую Индексы экземпляров виджетов начинаются с «2» в таблице «wp_options» Пользовательский цикл для пользовательского типа сообщения Переопределить количество сообщений по умолчанию для одного цикла? Используйте Gravatar в качестве резервного изображения, если локальное изображение не найдено Получить идентификатор категории детей текущей категории Показать все wp_get_post_terms slugs Шаблон категории для пользовательского типа сообщения

Создать таблицу из массива с подготовкой

Возможно ли создать таблицу с помощью функции wpdb::prepare ?

Я прочитал документацию и попытался найти примеры, но там, где никто не помог мне.

Даже создание таблицы с подготовкой не дает мне никаких полезных примеров в Google.

В настоящее время я создаю таблицу следующим образом:

 public function createTableFromFields( $tablename, $fields ) { // $wpdb = $this->db; $tablename = $wpdb->prefix . $tablename; $sql = 'CREATE TABLE IF NOT EXISTS ' . $tablename . ' (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY'; foreach ( $fields as $field ) { $sql .= ", $field TEXT"; } $sql .= ')'; $result = $wpdb->query( $sql ); return $result; } 

Но я узнал, что просто используя

 $wpdb->query($sql) 

небезопасно и что вам следует

 $wpdb->query(prepare($sql, $args). 

Итак, что мне помещать в $args здесь и что будет с кодом SQL, а затем с использованием строк формата запроса?

Я попробовал это в локальном режиме, и я думаю, что у вас есть несколько полей внутри $fields поэтому я добавил их в массив.

Просто посмотрите на код ниже; он отлично работает, как проверено:

 add_action('your_hook', 'createTableFromFields'); function createTableFromFields($tablename) { $wpdb = $this->db; $tablename = $wpdb->prefix . $tablename; $fields = array('PersonID','LastName'); $sql = 'CREATE TABLE IF NOT EXISTS %s (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY'; $test = array(); foreach ($fields as $field) { $test[] = $field." TEXT"; } $t = implode(",", $test); $sql .= ",%s)"; $result = $wpdb->query($wpdb->prepare(sprintf($sql, $tablename, $t))); return $result; }