Как дублировать таблицу в БД через код php?
Здравствуйте, есть сайт на wordpress , подключен мультисайт.
Суть такова, хочется сделать по нажатию кнопки что бы таблица относящаяся к главному сайту, копировалась на остальные поддомены...
Так вот, сам вопрос: Есть-ли такой код, что бы дублировать всю таблицу, с заданием нового имени?
Никогда такое не делал, но делал такое через phpmyadmin, там такое делается в пару кнопок, а мне нужно что бы через код)
Дополнительно:
meusov11 @meusov11 Да, в php необходимо использовать оператор SQL INSERT INTO … SELECT
Пример:
$sqlCopyData = "INSERT INTO $newTable SELECT * FROM $oldTable"; if ($conn->query($sqlCopyData) === TRUE) { echo "Данные успешно скопированы в новую таблицу."; } else { echo "Ошибка при копировании данных: " . $conn->error; } |
$sqlCopyData = "INSERT INTO $newTable SELECT * FROM $oldTable"; if ($conn->query($sqlCopyData) === TRUE) { echo "Данные успешно скопированы в новую таблицу."; } else { echo "Ошибка при копировании данных: " . $conn->error; }
- Спасибо добрый человек, буду изучать)
Получается, перед этим ещё нужно создать похожую структуру таблицы оригинала, верно?
CREATE TABLE $newTable LIKE $oldTable; - sergo573, чтобы сильно не мучиться, код для создания таблиц бери из инструментов резервного копирования самой бд, например для mysql это mysqldump... в принципе можно и данные ею же копировать
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Да, таблицу MySQL можно скопировать из PHP в два шага: сначала создать новую таблицу с такой же структурой, затем перенести данные. В WordPress лучше работать через
$wpdb, а имена таблиц обязательно проверять или собирать самому, потому что плейсхолдеры SQL не защищают имена таблиц так же, как значения.global $wpdb; $old_table = $wpdb->base_prefix . 'some_table'; $new_table = $wpdb->prefix . 'some_table_copy'; if (!preg_match('/^[a-zA-Z0-9_]+$/', $old_table . $new_table)) { wp_die('Bad table name'); } $wpdb->query("CREATE TABLE {$new_table} LIKE {$old_table}"); $wpdb->query("INSERT INTO {$new_table} SELECT * FROM {$old_table}");
Если таблица должна копироваться на сайты мультисайта, нужно пройтись по блогам через
get_sites()иswitch_to_blog(). Тогда$wpdb->prefixбудет меняться под текущий сайт сети.global $wpdb; $source_table = $wpdb->base_prefix . 'catalog'; foreach (get_sites(['fields' => 'ids']) as $blog_id) { switch_to_blog($blog_id); $target_table = $wpdb->prefix . 'catalog'; $wpdb->query("DROP TABLE IF EXISTS {$target_table}"); $wpdb->query("CREATE TABLE {$target_table} LIKE {$source_table}"); $wpdb->query("INSERT INTO {$target_table} SELECT * FROM {$source_table}"); restore_current_blog(); }
Важные ограничения:
CREATE TABLE ... LIKEкопирует структуру и индексы, но не всегда копирует внешние ключи и триггеры.Для разовой административной операции безопаснее оформить это отдельной WP-CLI командой или админским инструментом с nonce и проверкой прав, а не запускать по обычной кнопке без защиты.