Автор Тема: Исходник на PHP по снятию дампа MySQL  (Прочитано 4850 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SlavaK

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Исходник на PHP по снятию дампа MySQL
« : 23 Сентября 2003, 13:37:59 »
Есть ли у кого доступный исходник на PHP по снятию дампа MySQL (как это делает PHPMyAdmin при экспорте структуры и данных таблиц). По коду в PHP-файлах PHPMyAdmin я разобраться не смог.
 :(

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Исходник на PHP по снятию дампа MySQL
« Ответ #1 : 23 Сентября 2003, 13:40:52 »
ну и где гарантия, если тебе дадут "другой" исходник, что ты в нем сможешь "разобраться".
попробуй свой сделать
ну, будем исповедоваться?

Оффлайн nagash

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 341
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.nagash.org
Исходник на PHP по снятию дампа MySQL
« Ответ #2 : 24 Сентября 2003, 04:31:20 »

$fp 
fopen("dump.sql", +w);
$result mysql_query("SELECT * FROM table");
while(
$row mysql_fetch_array($resultMYSQL_NUM)) {
  foreach(
$row as $val) {
    
fputs ($fp$val."|||");
  }
  
fputs ($fp"\\n");
}

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Исходник на PHP по снятию дампа MySQL
« Ответ #3 : 24 Сентября 2003, 09:43:14 »
nagash
только это не дамп вовсе
ну, будем исповедоваться?

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Исходник на PHP по снятию дампа MySQL
« Ответ #4 : 25 Сентября 2003, 18:03:46 »
нарыл тут: http://alimamed.pp.ru/projects/getdump.phps

ногами не пинать - писано года два-три назад
ну, будем исповедоваться?

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Исходник на PHP по снятию дампа MySQL
« Ответ #5 : 25 Сентября 2003, 21:57:54 »
вот только что написал (из интереса). Вроде бы даже работает.
Глюки конечно же возможны (см. комметарии), но мне они не мешают.

<?
/**
 * Функция, создающая дамп базы данных
 * Автор: Максим Матюхин
 * mailto: [email]max@webscript.ru[/email]
 * ----------------------------------------
 * 1. Имена таблиц и полей таблиц получаются в нижнем регистре
 * 2. Возможны проблемы с полями у которых значение NULL 
 *    (но я всем аттрибут NOT NULL устанавливаю, так что меня это не волнует)
 */



/**
 * Параметры:
 * $dbname string    - имя базы данных
 * $conn resource    - соединение с сервером БД
 * $tabs array       - массив таблиц, дамп которых нужно сделать
 *                     Если массив пуст - дамп создается для всех таблиц
 * $add_drop boolean - нужно ли в дамп, добавлять удаление таблиц.
 * -------
 * возвращает имя файла с дампом
 */  
function mysql_dump($dbname$conn null$tabs = array(), $add_drop true) {
   
// имя файла, куда запишем дамп
   
$file $dbname." ".date(\'Y-m-d\').".sql";
   if (sizeof($tabs) == 0) {
      // получаем список таблиц базы
      $res = mysql_query("SHOW TABLES FROM ".$dbname, $conn);
      if (mysql_num_rows($res) > 0) {
         while ($row = mysql_fetch_row($res)) {
            $tabs[] = $row[0];
         }
      }
   }
   
   // открываем файл для записи дампа
   $fp = fopen($file, "w");
   foreach($tabs as $tab) {
      fputs ($fp, "#\\r\\n# dump for table ".$tab."\\r\\n#\\r\\n");
      if ($add_drop) {
         fputs($fp, "DROP TABLE IF EXISTS `".$tab."`;\\r\\n");
      }
      
      // получаем текст запроса создания структуры таблицы
      $res = mysql_query("SHOW CREATE TABLE `".$tab."`", $conn) or die(mysql_error());
      $row = mysql_fetch_row($res);
      fputs($fp, $row[1].";\\r\\n");
      
      // получаем данные таблицы
      $res = mysql_query("SELECT * FROM `$tab`", $conn);
      if (mysql_num_rows($res) > 0) {
         while ($row = mysql_fetch_assoc($res)) {
            $keys = implode("`, `", array_keys($row));
            $values = array_values($row);
            foreach($values as $k=>$v) {$values[$k] = addslashes($v);}
            $values = implode("\', \'", $values);
            $sql = "INSERT INTO `$tab`(`".$keys."`) VALUES (\'".$values."\');\\r\\n";
            fputs($fp, $sql);
         }
      }
      fputs ($fp, "# ---- \\r\\n\\r\\n");
   }
   fclose($fp);
   return $file;
}

set_time_limit(0);
$conn = mysql_connect("localhost", "root", "");
mysql_select_db(\'lot\', $conn) or die (mysql_error());
mysql_dump(\'lot\', $conn);
?>
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Исходник на PHP по снятию дампа MySQL
« Ответ #6 : 25 Сентября 2003, 22:24:19 »
Макс
может я не догоняю чего...но так не легче:

SELECT select_expression,... INTO {OUTFILE | DUMPFILE} \'file_name\' export_options ... bla-bla-bla
?

вроде как встроенный дамп таблицы...
с
http://www.mysql.com/doc/ru/SELECT.html
•••Jah\'d never let us down!•••

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Исходник на PHP по снятию дампа MySQL
« Ответ #7 : 25 Сентября 2003, 22:32:35 »
Xander
мне удобнее иметь SQL-дамп (который к тому же имеет и запросы по созданию структуры БД) чем несколько файлов с coma-separated данными под каждую таблицу.

ЗЫ
мне просто стало интересно написать функцию, строящую дамп как phpMyAdmin (ну или хотя бы чуть чуть похожую :))
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Исходник на PHP по снятию дампа MySQL
« Ответ #8 : 25 Сентября 2003, 23:06:06 »
Макс
а, понятно.
...а я бы через system mysqldump бы вызвал наверное :))
•••Jah\'d never let us down!•••

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Исходник на PHP по снятию дампа MySQL
« Ответ #9 : 26 Сентября 2003, 00:11:06 »
я почти уверен, что у автора данного треда нет доступа к mysqldump
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Исходник на PHP по снятию дампа MySQL
« Ответ #10 : 26 Сентября 2003, 01:59:23 »
как вариант:
ногами не бить - написано года полтора назад, как один из методов класса, для работы с муськой

function clGetDump($bStructOnly 1,$bAddDropQuery 0)
	
{
	
	
$aTables mysql_list_tables($this->szDbName);
	
	
$nTables mysql_num_rows($aTables);
	
	
$step 0;
	
	
 
$szReturnString "#DUMP FOR DATABASE ".$this->szDbName.\'
\';
	
	
while($step < $nTables)
	
	
{
	
	
	
$szTableName = mysql_tablename($aTables,$step);
	
	
	

	
	
	
if($bAddDropQuery)
	
	
	
{
	
	
	
	
 $szReturnString .= \'
DROP TABLE IF EXISTS \'.$szTableName.\';

\';
	
	
	
}
	
	
	

	
	
	
$szReturnString .= \'CREATE TABLE \'.$szTableName.\' (
\';
	
	
	

	
	

	
	
	
$query = "DESCRIBE ".$szTableName;
	
	
	
$result = mysql_query($query);
	
	
	
$szKeys = \'\';
	
	
	
$szFieldsString = \'\';
	
	
	

	
	
	
while($szField = mysql_fetch_assoc($result))
	
	
	
{
	
	
	
	
if(!empty($szField["Key"]))
	
	
	
	
{
	
	
	
	
	
if($szField["Key"] == \'PRI\')
	
	
	
	
	
{
	
	
	
	
	
	
$szKeys .= \'PRIMARY KEY (\'.$szField["Field"].\'),
\';
	
	
	
	
	
}elseif($szField["Key"] == \'UNI\')
	
	
	
	
	
{
	
	
	
	
	
	
$szKeys .= \'UNIQUE KEY (\'.$szField["Field"].\'),
\';
	
	
	
	
	
}
	
	
	
	
	
else
	
	
	
	
	
{
	
	
	
	
	
	
$szKeys .= \'KEY \'.$szField["Field"].\' (\'.$szField["Field"].\'),
\';
	
	
	
	
	
}
	
	
	
	
	

	
	
	
	
}
	
	
	
	

	
	
	
	
if(empty($szField["Null"]))
	
	
	
	
{
	
	
	
	
	
$szNullField = \' NOT NULL\';
	
	
	
	
	
$defField = \' default \\\'\'.$szField["Default"].\'\\\'\';
	
	
	
	
}
	
	
	
	
else
	
	
	
	
{
	
	
	
	
	
$szNullField = \' default NULL\';
	
	
	
	
	
$defField = \'\';
	
	
	
	
}
	

	
	
	
	
 $szFieldsString .= $szField["Field"].\' \'.$szField["Type"].$szNullField.$defField.\' \'.$szField["Extra"].\',
\';
	
	
	
}
	
	
	
if(!empty($szKeys))
	
	
	
{
	
	
	
	
$szKeys = substr($szKeys,0,strrpos($szKeys,\'
\')-1).\'
\';
	
	
	
	
$szReturnString .= $szFieldsString.$szKeys;
	
	
	
}
	
	
	
else
	
	
	
{
	
	
	
	
$szFieldsString = substr($szFieldsString,0,strrpos($szFieldsString,\'
\')-1).\'
\';
	
	
	
	
$szReturnString .= $szFieldsString;
	
	
	
}
	
	
	

	
	
	
$query = "SHOW TABLE STATUS";
	
	
	
$result = mysql_query($query);
	
	
	
$szTableInfo = mysql_result($result,$step,"type");
	
	
	
$szReturnString .= \')Type=\'.$szTableInfo.\';

\';
	
	
	
$szReturnString .= \'#------------------------------------------------

\';
	
	
	
@mysql_free_result($result);
	
	
	

	
	
	
$step++;
	
	
	
if($bStructOnly == false)
	
	
	
{
	
	
	
	
$query = "SELECT * FROM ".$szTableName;
	
	
	
	
$result2 = mysql_query($query);
	
	
	
	
while($row = mysql_fetch_row($result2))
	
	
	
	
{
	
	
	
	
	
$szReturnString .= \'INSERT INTO \'.$szTableName.\' VALUES(\';
	
	
	
	
	
for($i = 0; $i < sizeof($row); $i++)
	
	
	
	
	
{
	
	
	
	
	
	
$szReturnString .= \'\\\'\'.$row[$i].\'\\\',\';
	
	
	
	
	
}
	
	
	
	
	
$szReturnString = substr($szReturnString,0,strlen($szReturnString)-1);
	
	
	
	
	
$szReturnString .= \');
\';
	
	
	
	
}
	
	
	
}
	
	
}
	
	

	
	

	
	

	
	
return $szReturnString;
	
	

	
}
AS IS...

Оффлайн tarya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 370
  • +0/-0
  • 0
    • Просмотр профиля
Исходник на PHP по снятию дампа MySQL
« Ответ #11 : 27 Сентября 2003, 00:53:54 »
Теоретик знает все, и это меня поражает
Рожденный с понимающим, и гордо поднятым кулаком! Свидетель разреза запястья — он с ним!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28