Forum Webscript.Ru
Программирование => PHP => Тема начата: SlavaK от 23 Сентября 2003, 13:37:59
-
Есть ли у кого доступный исходник на PHP по снятию дампа MySQL (как это делает PHPMyAdmin при экспорте структуры и данных таблиц). По коду в PHP-файлах PHPMyAdmin я разобраться не смог.
:(
-
ну и где гарантия, если тебе дадут "другой" исходник, что ты в нем сможешь "разобраться".
попробуй свой сделать
-
$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");
}
-
nagash
только это не дамп вовсе
-
нарыл тут: http://alimamed.pp.ru/projects/getdump.phps
ногами не пинать - писано года два-три назад
-
вот только что написал (из интереса). Вроде бы даже работает.
Глюки конечно же возможны (см. комметарии), но мне они не мешают.
/**
* Функция, создающая дамп базы данных
* Автор: Максим Матюхин
* 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);
?>
-
Макс
может я не догоняю чего...но так не легче:
SELECT select_expression,... INTO {OUTFILE | DUMPFILE} \'file_name\' export_options ... bla-bla-bla
?
вроде как встроенный дамп таблицы...
с
http://www.mysql.com/doc/ru/SELECT.html
-
Xander
мне удобнее иметь SQL-дамп (который к тому же имеет и запросы по созданию структуры БД) чем несколько файлов с coma-separated данными под каждую таблицу.
ЗЫ
мне просто стало интересно написать функцию, строящую дамп как phpMyAdmin (ну или хотя бы чуть чуть похожую :))
-
Макс
а, понятно.
...а я бы через system mysqldump бы вызвал наверное :))
-
я почти уверен, что у автора данного треда нет доступа к mysqldump
-
как вариант:
ногами не бить - написано года полтора назад, как один из методов класса, для работы с муськой
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;
}
-
Теоретик знает все, и это меня поражает