我有那个脚本以sql格式下载我表的所有内容并保存本地副本。我的问题是我的表格内容非常庞大,实际数据大约为50MB,而我的脚本生成的数据只有3.5MB。我的剧本出了什么问题?为什么所有数据都不是用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;
}
答案 0 :(得分:0)
不确定我是否理解正确,但是一个小注意事项:为什么首先将所有这些值存储在变量中而不是直接将它们写入文件?对我没有任何意义,因为你只能填满你的可用记忆。
<强>更新强>
还有一些注意事项:也许应该使用mysql_real_escape_string(),为什么要重复所有这些INSERTS?一个INSERT后跟many(),();应该够了。如何区分代码中的整数,字符串,布尔值和NULL?如果您稍后尝试使用sql文件,这可能会导致问题。
答案 1 :(得分:0)
Filesize可能不是确定脚本是否正常工作的最佳方法。你检查过脚本产生的数据了吗?
它不是非常优雅,但它很快,不需要任何昂贵的工具,如果WinMerge确实拾取了两者之间的任何差异,那么这也应该表明问题所在。