Я пытаюсь удалить одну или несколько таблиц сразу в моей 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> ";
}
Ссылаясь на этот 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']
, а затем отбросить найденные таблицы.