Я пытаюсь удалить одну или несколько таблиц сразу в моей базе данных mySQLi, если она содержит строковую переменную. Так, например, скажем, у меня есть 5 таблиц в моей базе данных:
Таблица 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> ";
}






Ссылаясь на ответ это 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> ";
}
Спасибо за ответ, я добавил правку в свой пост. Как мне реализовать это в моем запросе $sql?
Вы можете получить имена таблиц с помощью
SHOW TABLES [FROM db_name] [LIKE 'pattern'], а затем отбросить найденные таблицы.