У меня есть script, который загружает все содержимое моей таблицы в формате sql и сохраняет локальную копию. Моя проблема заключается в том, что содержимое моей таблицы настолько велико, фактические данные составляют около 50 МБ, а данные, создаваемые моим script, всего 3,5 МБ. Что случилось с моим script? почему все данные не записаны в 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;
}
Размер файла не может быть лучшим способом определить, работает ли script. Вы проверили данные, полученные script?
Это не очень элегантно, но быстро, не требует каких-либо дорогостоящих инструментов, и если WinMerge действительно подбирает любые различия между ними, это также должно указывать, где лежит проблема.
Не уверен, правильно ли я вас понимаю, но одно небольшое примечание. Почему вы сохраняете все эти значения в переменной в первую очередь, а не просто записываете их непосредственно в файл? Для меня это не имеет никакого смысла, потому что вы получаете только доступную память.
Обновление
Еще несколько заметок: Может быть, mysql_real_escape_string() следует использовать и зачем повторять все эти ВСТАВКИ? Один INSERT сопровождается многими(),(); должно быть достаточно. Как вы различаете целые, строковые, логические и NULL в коде? Это может привести к ошибке, если вы попытаетесь использовать свой файл sql позже.