Ich habe eine PHP-Funktion gefunden, um eine mySQL-Datenbank zu dumpen, die jemand anderes geschrieben hatte, und habe sie dann bereinigt und ein wenig formatiert. Ich wollte wissen, ob ich eine Kritik dazu bekommen kann. Ich habe es ausgeführt, getestet es auf einem Wordpress-Blog und die DB vollständig wiederhergestellt, aber wollte einige andere Augen auf den Code zu bekommen.
Insbesondere suche ich nach Feedback zu:
- Alles, was die Daten beschädigen könnte - nicht korrektes Escaping usw.
- Verstoß gegen bewährte Praktiken/Grundsätze
- Sicherheitsfragen
- Alles, was Sie sonst noch für problematisch halten
ANMERKUNG: Ich bin NICHT auf der Suche nach mysqldump, möchte ich dieses Sql-Backup vollständig aus dem Code generieren. Ich erkenne auch, dass der Dateiname zufällig generiert werden könnte, aber die SQL-Datei wird auch auf Dropbox hochgeladen werden, und ich möchte es unter dem gleichen Namen zu versionieren.
Gracias.
Code:
// 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);