Возможно ли создать таблицу с помощью функции 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; }