PHP数据库转储脚本 – 有什么问题吗?
作者:互联网
我找到了一个PHP函数来转储其他人编写的mySQL数据库,然后将其清理并格式化了一下.我想知道我是否可以批评它.我已经运行它,在Wordpress博客上测试它并且数据库完全恢复,但是想要了解代码.
具体来说,我正在寻找反馈:
>任何可能破坏数据的东西 – 没有正确逃脱等
>违反任何最佳做法/原则
>安全问题
>你可能会看到任何其他问题
注意:我不想使用mysqldump,我想从代码中完全生成这个sql备份.我也意识到文件名可以随机生成,但SQL文件也会上传到dropbox,我想用相同的名称对它进行版本控制.
谢谢!
码:
// Variables
$dbHost = 'DBHOST';
$dbUser = 'DBUSER';
$dbPassword = 'DBPASSWORD';
$dbName = 'DBNAME';
$tables = '*';
$fileName = 'mydatabase.sql';
// Logic
$link = @mysql_connect($dbHost, $dbUser, $dbPassword);
$db = @mysql_select_db($dbName, $link);
if(!$link || !$db)
die("Database Error");
//get all of the tables
if($tables == '*') {
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)) {
$tables[] = $row[0];
}
}
else $tables = is_array($tables) ? $tables : explode(',',$tables);
// Loop through tables
foreach($tables as $table) {
$result = mysql_query('SELECT * FROM '. $table);
$num_fields = mysql_num_fields($result);
$return.= 'DROP TABLE IF EXISTS ' . $table . ';';
$createTable = mysql_fetch_row(mysql_query('SHOW CREATE TABLE ' . $table));
$return .= "\n\n" . $createTable[1] . ";\n\n";
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 the file
$handle = fopen($fileName, 'w+');
fwrite($handle, $return);
fclose($handle);
解决方法:
那个剧本有严重的,破坏性的问题.除了最琐碎的数据库之外,它不会起作用.
>不支持NULL.
>不考虑字符集.
>表名称未分隔.
>仅支持表 – 不支持视图,存储过程,触发器,函数等.
> addslashes()
is not character-set safe.
> mysql_query()预取表中的所有行,因此如果查询具有数百万行的表,则将超出PHP内存限制.请改用mysql_unbuffered_query().第二个想法,我看到你收回$return中的所有输出,所以这没有实际意义.
>使用@运算符抑制错误是不好的做法.检查错误并使用信息性消息正常失败.
你不使用mysqldump的要求是荒谬的.
为什么要为自己重新制造轮子做这么多工作,但仍然如此错误?只需通过shellexec()
运行mysqldump.
也可以看看:
> Why is my database backup script not working in php?
标签:database-backups,php,mysql,backup 来源: https://codeday.me/bug/20191001/1838353.html