masa back-up CSV veya eksik SQL Format ya

2 Cevap

Ben sql formatında benim tablonun tüm içeriğini indirir ve yerel bir kopyasını kaydetmeniz komut dosyası var. Benim sorun benim tablonun içeriği çok büyük, gerçek veri 50MB ve benim script üretilen veriler sadece 3.5MB olduğunu. Ne benim komut ile yanlış? neden tüm veri sql dosyasında yazılı değil?

$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 Cevap

Emin değilim doğru anladıysam eğer, ama küçük bir not: Neden ilk etapta bir değişken tüm bu değerleri saklamak yoktur ve sadece dosyaya doğrudan bunları yazmak değil? Eğer sadece kullanılabilir hafıza dolu olsun çünkü, bana hiç mantıklı gelmiyor.

Update

Bir çift daha not: Belki () kullanılmalıdır mysql_real_escape_string ve neden tüm bu UçLaRı tekrarlıyorum? Birçok kişi tarafından izlenen bir INSERT (), (); yeterli olacaktır. Nasıl kod tamsayı, dize, mantıksal ve NULL arasında ayrım yapmak? Eğer daha sonra sql dosyasını kullanmaya çalışırsanız bu bir soruna yol açabilir.

Dosya boyutu komut dosyası düzgün çalışıp çalışmadığını belirlemek için en iyi yol olmayabilir. Eğer komut üreten veriler üzerinde kontrol ettiniz mi?

  1. Use the saved sql file to create a temp duplicate of the table you are trying to export.
  2. Bu geçici masaya komut dosyasını çalıştırın.
  3. Use a utility such as WinMerge to see if the two files are identical or not.

Bu korkunç zarif değil, ama hızlı, herhangi bir pahalı alet gerektirmez ve WinMerge pikap ikisi arasında herhangi bir fark yoksa sorun burada yatıyor, bu da belirtmelidir.