Ben başkasının yazmış olduğu bir mySQL veritabanı dökümü için bir PHP işlevi bulunan ve daha sonra o kadar temizlenir ve bunu biraz biçimlendirilmiş. Ben bunun bir eleştirisini alabilir olmadığını bilmek istiyordu. Ben koştum bir Wordpress blog ve DB tamamen geri yükler üzerinde test edilmiş, ancak kodu diğer bazı gözleri almak istedim.
Özellikle ben geribildirim için arıyorum:
- Vs düzgün kaçan değil - veri bozuk olabilir bir şey
- Herhangi bir iyi uygulama / ilkelerini ihlal
- Güvenlik sorunları
- Eğer bir sorun olarak görebilirsiniz başka bir şey
NOT: Ben NOT mysqldump kullanmak isteyen, tamamen koddan bu sql yedeği oluşturmak istiyorum duyuyorum. Ben de dosya rastgele oluşturulmuş olabileceğini biliyoruz, ama SQL dosya yanı sıra Dropbox yüklenecektir, ve ben aynı isim altında sürümüne onu istiyorum.
Teşekkürler!
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);