Forum Webscript.Ru

Программирование => PHP => Тема начата: SlavaK от 23 Сентября 2003, 13:37:59

Название: Исходник на PHP по снятию дампа MySQL
Отправлено: SlavaK от 23 Сентября 2003, 13:37:59
Есть ли у кого доступный исходник на PHP по снятию дампа MySQL (как это делает PHPMyAdmin при экспорте структуры и данных таблиц). По коду в PHP-файлах PHPMyAdmin я разобраться не смог.
 :(
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: AliMamed от 23 Сентября 2003, 13:40:52
ну и где гарантия, если тебе дадут "другой" исходник, что ты в нем сможешь "разобраться".
попробуй свой сделать
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: nagash от 24 Сентября 2003, 04:31:20

$fp = fopen("dump.sql", +w);
$result = mysql_query("SELECT * FROM table");
while($row = mysql_fetch_array($result, MYSQL_NUM)) {
  foreach($row as $val) {
    fputs ($fp, $val."|||");
  }
  fputs ($fp, "\\n");
}
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: AliMamed от 24 Сентября 2003, 09:43:14
nagash
только это не дамп вовсе
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: AliMamed от 25 Сентября 2003, 18:03:46
нарыл тут: http://alimamed.pp.ru/projects/getdump.phps

ногами не пинать - писано года два-три назад
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: Макс от 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);
?>
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: Xander от 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
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: Макс от 25 Сентября 2003, 22:32:35
Xander
мне удобнее иметь SQL-дамп (который к тому же имеет и запросы по созданию структуры БД) чем несколько файлов с coma-separated данными под каждую таблицу.

ЗЫ
мне просто стало интересно написать функцию, строящую дамп как phpMyAdmin (ну или хотя бы чуть чуть похожую :))
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: Xander от 25 Сентября 2003, 23:06:06
Макс
а, понятно.
...а я бы через system mysqldump бы вызвал наверное :))
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: Макс от 26 Сентября 2003, 00:11:06
я почти уверен, что у автора данного треда нет доступа к mysqldump
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: ThE0ReTiC от 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;
}
Название: Исходник на PHP по снятию дампа MySQL
Отправлено: tarya от 27 Сентября 2003, 00:53:54
Теоретик знает все, и это меня поражает