如何按名称删除多个数据库,与sql约会?

时间:2014-09-10 06:47:58

标签: php mysql sql database

下面的代码列出了所有存在的数据库并将它们提取到一个数组中,对于列出的每个数据库的表都是一样的。然后它创建新的数据库和表,包含旧数据库和表的每个值,但是th extension _backup-(某个特定日期)。

$sql="SHOW DATABASES";
$query=mysql_query($sql,$connect);              
while ($row = mysql_fetch_assoc($query)) {
    $sql2="SHOW TABLES FROM ".$row['Database'];
    $query2=mysql_query($sql2, $connect);            
    $sql3 = "CREATE DATABASE `".$row['Database']."_backup-".$d."`";
    $query3=mysql_query($sql3,$connect);                                                    
 while( $row2 = mysql_fetch_assoc($query2) ) {   
  foreach($row2 as $rand2) { 
  $sql4 = "CREATE TABLE `".$row['Database']."_backup-".$d."`.`".$rand2."` SELECT * FROM `".$row['Database']."`.`".$rand2."`";
  $query4=mysql_query($sql4,$connect);
  }              
 }   
}

此代码作为备份工作,但我唯一不知道的是如何删除旧数据库。让我们说今天触发这个脚本(10.9.2014),这段代码将创建一个备份db1_backup-10.0 .2014对于名为db1的原始数据库,如果我们今天再次触发它,它将备份以前的备份,这是一件令人讨厌的事情,所以我需要删除之前的备份,在创建新备份之后,并保留原来的数据库。我真的可以帮助你了。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在代码

之前添加DROP DATABASE
$sql="SHOW DATABASES";
$query=mysql_query($sql,$connect);              
while ($row = mysql_fetch_assoc($query)) {
    //Blacklist these to not make backup 
    if(! in_array($row['Database'], array('mysql', 'information_schema', 'performance_schema')) && strpos($row['Database'], "_backup-".$d) === false) {
        $sql2="SHOW TABLES FROM `".$row['Database']."`;";
        $query2=mysql_query($sql2, $connect) or die(mysql_error());
        $dropDb = "DROP DATABASE IF EXISTS `".$row['Database']."_backup-".$d."`";
        mysql_query($dropDb, $connect);
        $sql3 = "CREATE DATABASE `".$row['Database']."_backup-".$d."`";
        $query3=mysql_query($sql3,$connect) or die(mysql_error());                                                    

        while( $row2 = mysql_fetch_assoc($query2) ) {   
          foreach($row2 as $rand2) { 
            $sql4 = "CREATE TABLE `".$row['Database']."_backup-".$d."`.`".$rand2."` SELECT * FROM `".$row['Database']."`.`".$rand2."`";
            $query4=mysql_query($sql4,$connect);
          }              
        }
    }
}

这样,同一日期只有一份备份副本

更新:你得到的是mysql_fetch_assoc() expects parameter 1 to be resource,因为在$ sql2&表格名称中缺少了回拨号``保持数据库名称长度低于 16个字符

经过测试和工作