БлогNot. Как скопировать базу данных потаблично без PhpMyAdmin

Как скопировать базу данных потаблично без PhpMyAdmin

Переливал один сайтик на новое место, причём, доступа к базе через phpmyadmin нет, но зато есть доступ по ftp к папке на сервере и известна структура базы, так что можно скопировать данные потаблично с помощью программно сформированных SQL-запросов.

Например, для таблицы, созданной sql-выражением вида

CREATE TABLE questions ( #вопросы тестов
 id          int PRIMARY KEY auto_increment, #ID вопроса
 testsid     int,                            #ID теста
 catsid      int,                            #ID категории
 title       text,                       #текст вопроса
 anons       text,                       #необязательное пояснение к вопросу
 picture     varchar (80),               #необязательная картинка к вопросу
 maxvar      tinyint(2) default '2',     #требуемое число отображаемых вариантов
 maxgood     tinyint(2) DEFAULT '1',     #требуемое число правильных вариантов
 questions   text,                       #варианты, разделитель - перевод строки
 balls       text,                       #баллы за варианты, разделитель - перевод строки
 collect     tinyint(1) DEFAULT '0',     
  #Если не 0 - начислять collect баллов только при правильном сочетании вариантов ответа для случая maxgood>1
 visible     TINYINT(1) DEFAULT '1'      #Видимость
);

получается такой код на PHP:

<?php
 error_reporting(E_ALL);
 require_once ("functions.php");

  $sql="select * from questions"; 
  $result = dbquery($sql) or die (mysql_error());
  if ($result and dbrows ($result)) {
   $questions = array ();
   echo "insert into questions values<br>\n";
   while ($article = dbfetcha($result)) {
    while (list($var, $param) = @each($article)) $questions[$var] = $param;
   echo '('.
 $questions['id'].','.
 $questions['testsid'].','.
 $questions['catsid'].','.
 '\''.$questions['title'].'\','.
 '\''.$questions['anons'].'\','.
 '\''.$questions['picture'].'\','.
 $questions['maxvar'].','.
 $questions['maxgood'].','.
 '\''.nl2br(addslashes($questions['questions'])).'\','.
 '\''.nl2br(addslashes($questions['balls'])).'\','.
 $questions['collect'].','.
 $questions['visible'].
 '),'."<br>\n";
   }
   echo ";";
  }
?>

Здесь dbquery - функция выполнения sql-запроса, а dbfetcha - функция извлечения очередной записи, полученной по запросу, они взяты из файла-обёртки functions.php, подобного решению из этой статьи.

На выходе в браузере получается файл формата .sql, который можно непосредственно скопировать со страницы через Ctrl+A, Ctrl+C и сунуть в новую базу.

Запятую в предпоследней строке (перед ;) полученного запроса на вставку нужно убрать вручную, я поленился это отдельно обрабатывать.

Существенно, что если в данных имеют значение переводы строки, такое поле обрабатывается функцией nl2br, а если в строках из базы могли оказаться кавычки, апострофы или обратные слэши, такую строку надо обработать ещё и методом addslashes. Все строки, как видно из кода, заключаются в апострофы, а все числа пишутся в запрос "как есть".

Затем меняем имя таблицы после слов select и insert into и составляем новый оператор echo для очередной таблицы.

01.11.2017, 13:15 [2314 просмотров]


теги: памятка php mysql

К этой статье пока нет комментариев, Ваш будет первым