newphpbees Posted January 26, 2012 Share Posted January 26, 2012 Hi.. I've seen code for back up database but when I run the code the database was backup outside the folder. I want to put the back up database inside the folder here is the code: <?php include 'config.php'; backup_tables('localhost','root','','payroll'); /* backup the db OR just a table */ function backup_tables($host,$user,$pass,$name,$tables = '*') { $link = mysql_connect($host,$user,$pass); mysql_select_db($name,$link); //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); } //cycle through foreach($tables as $table) { $result = mysql_query('SELECT * FROM '.$table); $num_fields = mysql_num_fields($result); $return.= 'DROP TABLE '.$table.';'; $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); $return.= "\n\n".$row2[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 file $myfoldername = "backup_DBPayroll";//your folders name $handle = fopen(getcwd().$myfoldername.'db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); // $handle = fopen('db-backup-'.date('m-d-Y').'-'.(md5(implode(',',$tables))).'.sql','w+'); fwrite($handle,$return); fclose($handle); } $smarty->display('header_cat.tpl'); $smarty->display('backup.tpl'); $smarty->display('footer.tpl'); ?> Thank you in advance Quote Link to comment https://forums.phpfreaks.com/topic/255806-insert-back-up-database-in-a-folder/ Share on other sites More sharing options...
scootstah Posted January 26, 2012 Share Posted January 26, 2012 Why not just use mysqldump and make this 100x easier? exec("mysqldump -u root --all-databases > backup.sql"); Quote Link to comment https://forums.phpfreaks.com/topic/255806-insert-back-up-database-in-a-folder/#findComment-1311410 Share on other sites More sharing options...
newphpbees Posted January 27, 2012 Author Share Posted January 27, 2012 I already resolved it now using this code: <?php include 'config.php'; backup_tables('localhost','root','','payroll'); /* backup the db OR just a table */ function backup_tables($host,$user,$pass,$name,$tables = '*') { $link = mysql_connect($host,$user,$pass); mysql_select_db($name,$link); //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); } //cycle through foreach($tables as $table) { $result = mysql_query('SELECT * FROM '.$table); $num_fields = mysql_num_fields($result); $return.= 'DROP TABLE '.$table.';'; $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); $return.= "\n\n".$row2[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 file // $myfoldername = "backup_DBPayroll";//your folders name // $handle = fopen(getcwd().\.$myfoldername.'db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); //$myfoldername = $_SERVER['DOCUMENT_ROOT']."/backup_DBPayroll/";//your folders name //$handle = fopen($myfoldername.'db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); $myfoldername = "../backup_DBPayroll/";//your folders name $handle = fopen($myfoldername.'operatives-db-backup-'.date('m-d-Y').'-'.(md5(implode(',',$tables))).'.sql','w+'); // $myfoldername = $_SERVER['DOCUMENT_ROOT']."/path-to/backup_DBPayroll/";//your folders name // $handle = fopen($myfoldername.'db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); // $handle = fopen('db-backup-'.date('m-d-Y').'-'.(md5(implode(',',$tables))).'.sql','w+'); fwrite($handle,$return); fclose($handle); } $smarty->display('payroll_report_cat.tpl'); //$smarty->display('header_cat.tpl'); $smarty->display('backup.tpl'); $smarty->display('footer.tpl'); ?> Now, I just want to ask if with this same code file is possible to add code for back up one table as csv file? If possible how? Thank you Quote Link to comment https://forums.phpfreaks.com/topic/255806-insert-back-up-database-in-a-folder/#findComment-1311549 Share on other sites More sharing options...
trq Posted January 27, 2012 Share Posted January 27, 2012 That code is seriously inefficient and prone to errors because your not using any transactions. I would definitely recommend using mysqldump instead. Quote Link to comment https://forums.phpfreaks.com/topic/255806-insert-back-up-database-in-a-folder/#findComment-1311564 Share on other sites More sharing options...
newphpbees Posted January 27, 2012 Author Share Posted January 27, 2012 Can you give the whole code sample for that usingphp? Thank you Quote Link to comment https://forums.phpfreaks.com/topic/255806-insert-back-up-database-in-a-folder/#findComment-1311565 Share on other sites More sharing options...
scootstah Posted January 27, 2012 Share Posted January 27, 2012 Can you give the whole code sample for that usingphp? Thank you exec("mysqldump -u root --all-databases > backup.sql"); Quote Link to comment https://forums.phpfreaks.com/topic/255806-insert-back-up-database-in-a-folder/#findComment-1311583 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.