Удаление таблицы в MySQLi DB, если содержит значение в имени

0

Я пытаюсь удалить одну или несколько таблиц сразу в моей mySQLi db, если она содержит строковую переменную. Так, например, скажем, у меня 5 таблиц в моем db:

Таблица 1 - имя: db_table1_hello

Таблица 2 - имя: db_table2_world

Таблица 3 - имя: db_table3_hello

Таблица 4 - имя: db_table4_world

Таблица 5 - имя: db_table5_hello

Теперь у меня есть переменная, называемая tableString и имеет значение hello, теоретически она будет использоваться для вывода таблиц 1, 3 и 5.

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

Спасибо заранее, ребята.

РЕДАКТИРОВАТЬ:

$sql = "";

    if(mysqli_query($conn, $sql)){

        header("Location: " . $_SERVER["HTTP_REFERER"]);

    } else {  

        echo "Table deletion unsuccessfully<br> ";  

    }    
  • 2
    Вы можете получить имена таблиц с помощью SHOW TABLES [FROM db_name] [LIKE 'pattern'] , а затем отбросить найденные таблицы.
Теги:
mysqli

1 ответ

0
Лучший ответ

Ссылаясь на этот SO-ответ, вы можете отфильтровать имена таблиц из таблицы information_schema.tables следующим образом:

SELECT table_name FROM information_schema.tables WHERE table_name like '%hello%';

Таким образом, вы можете создать выражение, в котором выбрали предыдущий выбор следующим образом:

DELIMITER $$
SET @s = SELECT CONCAT('DROP TABLE ',table_name,';') 
         FROM   information_schema.tables 
         WHERE table_name like '%hello%'$$
DELIMITER ;
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

РЕДАКТИРОВАТЬ:

Вопрос изменился с просьбой о том, чтобы PHP-процедура удаляла таблицы. В PHP вы должны запустить первый SQL для получения имен таблиц, а затем удалить с помощью цикла эти таблицы:

$tableString = "hello";

$sql = "SELECT table_name FROM information_schema.tables WHERE table_name like '%$tableString%'";

$res = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_array($res)) {
    $tname = $row[0];
    $result = mysqli_query($conn, "DROP TABLE $tname");
    if (!$result) echo "Table $tname deletion unsuccessfully<br> ";  
}
  • 0
    Спасибо за ответ, я добавил правку в свой пост. Как я могу реализовать это в моем запросе $sql ?
  • 0
    Работал отлично, спасибо за помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню