вот только что написал (из интереса). Вроде бы даже работает.
Глюки конечно же возможны (см. комметарии), но мне они не мешают.
<?
/**
* Функция, создающая дамп базы данных
* Автор: Максим Матюхин
* 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);
?>