We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 26704
    • 115 Posts
    В один прекрасный день мне надоело удалять таблицы из бд с определенным префиксом - процесс надо отметить в моем исполнении крайне утомительный (в 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 коментарии в коде отображаются кодовым представлением.
      • 785
      • 2,113 Posts
      Не знаю, я бы лично все сделал иначе, например, так:
      <?php
      mysql_connect("localhost", "mysql_user", "mysql_password");
      $result = mysql_list_tables("mydb");
      for ($i = 0; $i < mysql_num_rows($result); $i++)
          if (substr(mysql_tablename($result, $i), 0, 5)=="modx_")
              mysql_query("DROP TABLE ".mysql_tablename($result, $i));
      ?>

      Написал приблизительно, возможны ошибки, сам не тестировал, может и не работать.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 26704
        • 115 Posts
        Да, получается намного лаконичнее, всему виной мое плохое знание функционала php, спасибо за оптимизацию, вечером наверное протестирую.