моя фун-я для извлечения БД

query

Новичок
Вот моя фун-я для извлечения БД:
Код:
function GetTableContent($table) {
	global $mysql;

	$result		 = $mysql->query("SELECT * FROM $table");
	$result_rows = mysql_num_rows($result);
	$result_num	 = mysql_num_fields($result);
	$data		 = '';

	for ( $i = 0; $i < $result_rows; $i++ ) {
		$result_arr = mysql_fetch_array($result);
		$data .= "INSERT INTO `$table`";

		/*for ( $number = 0; $number < $result_num; $number++ ) {
		
			$feldname = mysql_field_name($result, $number);

			if ($number == ($result_num - 1)) {
				$data .= "`".$feldname."`";
			} else {
				$data .= "`".$feldname."`".",";
			}
			
		}*/
		//$data .= ") VALUES (";
		$data .= " VALUES (";
		
		for ( $k = 0; $k < $result_num; $k++ ) {
		
			if ($k == ($result_num - 1)) {
				$result_arr[$k] = str_replace("\r\n", '\r\n', $result_arr[$k]);
				$data .= "'".addslashes($result_arr[$k])."'";
			} else {
				$result_arr[$k] = str_replace("\r\n", '\r\n', $result_arr[$k]);
				$data .= "'".$result_arr[$k]."', ";
			}
			
		}
		$data.= ");\n";
	}
	
	return $data;
}
function backup() {

	$data 	= "#\n# DATE : ".gmdate("d-m-Y H:i:s", time())." GMT\n#\n";
	$tables = array( _______ТАБЛИЦЫ________ );
	$max	= sizeof($tables);
	
	for ( $i = 0; $i < $max; $i++ ) {
	
		$data .= "\n#\n# TABLE: ".$tables[$i]."\n#\n\n";
		$data .= GetTableContent($tables[$i]);
		
	}
	
	return $data;
	
}
 

Фанат

oncle terrible
Команда форума
query
А что случится, если объем БД превысит размер оперативной памяти, выделенной скрипту?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
query
То что ты "наколбасил" решается 1-й строчкой.
mysql.com-->mysqldump
 

query

Новичок
Автор оригинала: *****
query
А что случится, если объем БД превысит размер оперативной памяти, выделенной скрипту?
Этот скрипт для извлечения небольших бд. Тестил 5метров, а потом их в gzip время генерации 1-2 сек.
 

Фанат

oncle terrible
Команда форума
query
неужели так сложно было сделать его для любых объемов, записывая строчку в файл сразу после получения её из БД?

и ещё.
ты уверен, что эта функция вставляет в базу ровно то, что в базе лежало?

$result_arr[$k] = str_replace("\r\n", '\r\n', $result_arr[$k]); $data .= "'".addslashes($result_arr[$k])."'";
я, глядя вот на эти две строчки, очень в этом сомневаюсь
 

query

Новичок
Зря. А уверен. Тестил много раз. Всё как надо :)

-~{}~ 27.01.08 20:58:

неужели так сложно было сделать его для любых объемов, записывая строчку в файл сразу после получения её из БД?
Да нет. Может переделаю :)
 

Фанат

oncle terrible
Команда форума
а я протестил, и у меня получилось не все как надо.
приведи пример дампа с переводами строк. вместе посмотрим.
 

query

Новичок
А что получилось не так ? Ты чем импортировал ?

Сейчас не могу привести пример. Позже.
 

Фанат

oncle terrible
Команда форума
Вообще-то, меня интересует не вся функция, а только процитированный мной кусок.

Я применил эти две строчки к тестовой строке, и там такое получилось...

Ты когда-нибудь пробовал дампить своей функцией данные, которые содержат строку "\r\n"?
 

query

Новичок
Конечно пробовал.
Без этой строки в дампе при просмотре типа такого:

VALUES ("Привет!

Это я!")

А со строкой VALUES ("Привет!\r\n\r\nЭто я!")


После импорта данные в БД выглядят так же как и раньше т.е.

Привет!

Это я!

-~{}~ 29.01.08 16:24:

Или ты хочешь сказать не перенос строки, а именно \r\n ??
 

Фанат

oncle terrible
Команда форума
я хочу сказать перенос строки вида "\r\n"
и в дампе оно выглядит, разумеется, не как \r\n\r\n, а как \\r\\n\\r\\n
что очевидно следует из твоего кода
 
Сверху