В один прекрасный день мне надоело удалять таблицы из бд с определенным префиксом - процесс надо отметить в моем исполнении крайне утомительный (в phpmyadmin требуется отметить все удаляемые таблицы галочками, что собственно меня и напрягает). Решила автоматизировать данный процесс. Более чем уверена, что гуру php во множестве присутствующие на данном сайте без труда решат данную проблему быстро и наверное более изящно чем я, но вот мне потребовалось пол дня поработать с поисковиком прежде чем я нашла способы решения задачи. Надеюсь скрипт поможет начинающим разработчикам и позволит сохранить время.
<?php
$user = ’root’;//имя пользователя, который должен иметь права на удаление таблиц из бд
$password = ’’;//его пароль
$dbName = ’’;//имя бд из которой будем удалять таблицы
$prefix = ’MODx_’;//префикс
$link = mysql_connect(’localhost’, $user, $password)
or die(’Не удалось соедениться с БД: ’ . mysql_error() . ’
’);
print(’Соединение установлено.
’);
mysql_select_db(’information_schema’, $link) or die (’Не могу выбрать БД [строка 11].
’);
$sql = "SELECT table_name FROM information_schema.COLUMNS WHERE table_schema = ’" . $dbName . "’ AND substring(table_name, 1, " . strlen($prefix) . ")=’" . $prefix . "’ GROUP BY table_name";
$result = mysql_query($sql);
if(!$result) {
$error = mysql_error();
print $error;
exit();
} else {
echo ’Всего позиций: ’ . mysql_num_rows($result) . ’
’;
mysql_select_db($dbName, $link) or die (’Не могу выбрать БД [строка 20].
’);
while($tables = mysql_fetch_array($result)) {
echo $tables[table_name] . ’
’;
$sql = ’DROP TABLE ’ . $tables[table_name];
mysql_query($sql);
}
}
mysql_close($link);
?>
по хорошему конечно надо бы написать веб оболочку для ввода имени пользователя, пароля, названия таблицы, а так же указания префикса. Возможно в скором времени займусь доработкой скрипта, а пока что советую после его использования удалять файл или же заблокировать доступ к нему средствами .htaccess , ну и не хранить пароль от пользователя в файле. Так же добавлю, что недавно данный скрипт меня сильно подвел: в бд у меня хранились таблицы с 2мя одинаковыми префиксами, различаемые регистром букв, допустим modx_ и MODx_ . Задача состояла в удалении таблиц с префиксом в нижнем регистре (_modx), его я и подставила в переменную. К моему удивлению скрипт удалил таблицы с префиксом в верхнем регистре, меня спас дамп базы, который я настоятельно рекомендую вам создавать перед использованием скрипта (мало ли что). При различных префиксах (различных в написании) все работает как часы.
Буду рада любым замечаниям и предложениям касательно данного скрипта.
P.S. почему то когда пытаюсь использовать на форуме бб код code коментарии в коде отображаются кодовым представлением.