резервное копирование таблицы в формате CSV или SQL неполное - PullRequest
0 голосов
/ 29 июня 2009

У меня есть сценарий, который загружает все содержимое моей таблицы в формате sql и сохраняет локальную копию. Моя проблема в том, что содержимое моей таблицы настолько велико, что реальные данные занимают около 50 МБ, а данные, генерируемые моим сценарием, - всего 3,5 МБ. Что не так с моим сценарием? почему все данные не записываются в файл sql?

$table = "Downloads";

$result = $db->query('SELECT * FROM '.$table);
$num_fields = $db->num_fields($result);

for ($i = 0; $i < $num_fields; $i++) 
{
    while($row = mysql_fetch_row($result))
    {
        $return.= 'INSERT INTO '.$table.' VALUES(';
        for($j=0; $j<$num_fields; $j++) 
        {   
            $row[$j] = addslashes($row[$j]);
            $row[$j] = ereg_replace("\n","\\n",$row[$j]);
            if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
            if ($j<($num_fields-1)) { $return.= ','; }
        }
        $return.= ");\n";
    }
}
$return.="\n\n\n";

//save file
$handle = fopen(UPLOAD_XML_PATH_ABSOLUTE.'downloads_backup'.'.sql','w+');
if(fwrite($handle,$return)){
    fclose($handle);
    //$ret = true;
} else {
    //$ret = false;
}

Ответы [ 2 ]

0 голосов
/ 29 июня 2009

Размер файла может быть не лучшим способом определить, правильно ли работает скрипт. Вы проверили данные, которые выдает скрипт?

  1. Используйте сохраненный файл sql для создания временная копия таблицы, которую вы пытаемся экспортировать.
  2. Запустите ваш скрипт на этой временной таблице.
  3. Используйте утилиту, такую ​​как WinMerge , чтобы увидеть если два файла идентичны или нет.

Это не очень элегантно, но быстро, не требует дорогостоящих инструментов, и если WinMerge обнаруживает какие-либо различия между ними, это также должно указывать, где проблема.

0 голосов
/ 29 июня 2009

Не уверен, правильно ли я вас понимаю, но одна небольшая заметка: почему вы храните все эти значения в переменной в первую очередь, а не просто записываете их непосредственно в файл? Не имеет никакого смысла для меня, потому что вы только заполняете доступную память.

Обновление

Еще пара замечаний: возможно, следует использовать mysql_real_escape_string () и зачем повторять все эти ВСТАВКИ? Одна ВСТАВКА, за которой следуют многие (), (); должно быть достаточно. Как вы различаете integer, string, boolean и NULL в вашем коде? Это может привести к проблеме, если вы попытаетесь использовать файл sql позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...