所以我用以下代码备份我的数据库:
$rows = $this->_getDb()->fetchAll("SELECT * FROM $table");
foreach ($rows AS $row)
{
foreach ($row AS &$value)
{
if (!is_numeric($value))
{
$value = "'".addcslashes($value, "'\\")."'";
$value = str_replace("\n", '\n', $value);
}
}
if (!$count)
{
$output .= "INSERT INTO `$table` (" .implode(', ', $columns). ") VALUES";
}
$count++;
$output .= "\n(" .implode(', ', $row). "),";
if ($count >= $limit)
{
$count = 0;
$output = preg_replace('#,$#', ";\n\n", $output);
}
}
$output = preg_replace('#,$#', ";\n\n", $output);
这似乎工作得很好......但我将我的输出与我从 PHPMyAdmin 获得的结果进行比较,我注意到一些细微的差异。使用我的代码,由于我的使用方式addcslashes
,如果字符串包含 a '
,它将使用\'
. 但是,在 PHPMyAdmin 的输出中,它将用连续'
的两个单引号替换一个单引号''
。
真的有区别吗?请查看我转义非数字字段的方式,并告诉我是否有更好的方法。