Как скопировать базу данных потаблично без 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 просмотров]