首页 > 编程技术 > php

php备份数据库脚本的几个例子

发布时间:2016-11-25 16:35

利用php备份mysql数据库就是把数据生成.sql文件,这样就算是数据备份成功了,恢复时也可以直接读取再一条条执行即可,下面整理了一些备份例子大家有兴趣的可进来参考。

例子。

 

 代码如下 复制代码
<?php
// 备份数据库
$host = "localhost";
$user = "root"; //数据库账号
$password = ""; //数据库密码
$dbname = "mysql"; //数据库名称
// 这里的账号、密码、名称都是从页面传过来的
if (!mysql_connect($host, $user, $password)) // 连接mysql数据库
    {
        echo '数据库连接失败,请核对后再试';
    exit;
}
if (!mysql_select_db($dbname)) // 是否存在该数据库
    {
        echo '不存在数据库:' . $dbname . ',请核对后再试';
    exit;
}
mysql_query("set names 'utf8'");
$mysql = "set charset utf8;\r\n";
$q1 = mysql_query("show tables");
while ($t = mysql_fetch_array($q1))
{
    $table = $t[0];
    $q2 = mysql_query("show create table `$table`");
    $sql = mysql_fetch_array($q2);
    $mysql .= $sql['Create Table'] . ";\r\n";
    $q3 = mysql_query("select * from `$table`");
    while ($data = mysql_fetch_assoc($q3))
    {
        $keys = array_keys($data);
        $keys = array_map('addslashes', $keys);
        $keys = join('`,`', $keys);
        $keys = "`" . $keys . "`";
        $vals = array_values($data);
        $vals = array_map('addslashes', $vals);
        $vals = join("','", $vals);
        $vals = "'" . $vals . "'";
        $mysql .= "insert into `$table`($keys) values($vals);\r\n";
    }
}
 
$filename = $dbname . date('Ymjgi') . ".sql"; //存放路径,默认存放到项目最外层
$fp = fopen($filename, 'w');
fputs($fp, $mysql);
fclose($fp);
echo "数据备份成功";
 
?>


例子

 代码如下 复制代码

#!/usr/bin/php www.111cn.net
<?php
header('Content-Type:text/html;charset=utf-8');

define('BACK_PATH', dirname(__FILE__));

/**
为空数组就备份所有数据库
*/
$back_databases = array('learning','wp');

$mysql_host = 'localhost';

$mysql_user = 'root';

$mysql_passwd = 'root';

if($conn = mysql_connect($mysql_host, $mysql_user, $mysql_passwd)){
 
 $databases = array();
 
 mysql_select_db('mysql', $conn);
 
 $query  =mysql_query('show databases',$conn);
 
 while($row = mysql_fetch_array($query))
 {
  if(empty($row)) continue;
  
  $database = $row[0];
  
  if(!empty($back_databases) && !in_array($database, $back_databases)) continue;
    
  $sql_dir = BACK_PATH . "/{$database}.sql";
   
  $execs = "mysqldump --user={$mysql_user} --password={$mysql_passwd} {$database} > " . $sql_dir;
  
  system($execs);
  
  if(file_exists($sql_dir . '.gz')) {
     unlink($sql_dir . '.gz');
  }
    
  system('gzip ' . $sql_dir);
 }
}

例子

 代码如下 复制代码
<?php
$host="##mysql服务器地址##";
$user="##登录帐号##";
$password="##登录密码##";
$dbname="##数据库名##";
$filename="##备份文件路径##";
mysql_connect($host,$user,$password);
mysql_select_db($dbname);
$mysql.="CREATE DATABASE IF NOT EXISTS `".$dbname."`;\r\n";
$mysql.="USE `".$dbname."`;\r\n\r\n";
$q0=mysql_query("set names utf8");
$q1=mysql_query("show tables");
while($t=mysql_fetch_array($q1)){
  $table=$t[0];
  $mysql.="DROP TABLE IF EXISTS `".$table."`;\r\n";
  $q2=mysql_query("show create table `$table`");
  $sql=mysql_fetch_array($q2);
  $mysql.=$sql['Create Table'].";\r\n\r\n";
  $q3=mysql_query("select * from `$table`");
  while($data=mysql_fetch_assoc($q3)){
    $keys=array_keys($data);
    $keys=array_map('addslashes',$keys);
    $keys=join('`,`',$keys);
    $keys="`".$keys."`";
    $vals=array_values($data);
    $vals=array_map('addslashes',$vals);
    $vals=join("','",$vals);
    $vals="'".$vals."'";
    $mysql.="insert into `$table`($keys) values($vals);\r\n";
  }
  $mysql.="\r\n";
}
$fp = fopen($filename,'wb');
fputs($fp,$mysql);
fclose($fp);
include_once('lib/pclzip.lib.php');
$archive = new PclZip($filename.'.zip');
$v_list = $archive->create($filename);
if ($v_list == 0) {
   die("Error : ".$archive->errorInfo(true));
}
if(file_exists($filename)){
   unlink($filename);
}
echo "Mysql's backup successfully to ".$filename.".zip";
?>

Zip打包备份代码,几乎就是全抄demo,太方便了:

 代码如下 复制代码

 

<?PHP
include_once('lib/pclzip.lib.php');
$src="##源路径##";
$dest="##目标zip路径##";
$archive = new PclZip($dest);
$v_list = $archive->create($src);
if ($v_list == 0) {
   die("Error : ".$archive->errorInfo(true));
}else{
     print("Success");
}
?>

pclzip.lib.php这个压缩包文件大家百度去下载这里未提供。

很多时候,数据库中的数据需要导出成excel,以下是最简便的方法,不用导出excel的类,即使功能简单,但是对于没有复杂需求的项目“见效快”。

先定义头部信息,表示输出一个excel。然后再以table的形式把数据库的信息循环的echo出来,就好了。

 代码如下 复制代码

<?php

 

 header("Content-type:application/vnd.ms-excel");

 header("Content-Disposition:filename=xls_region.xls");

 $cfg_dbhost = 'localhost';

 $cfg_dbname = 'testdb';

 $cfg_dbuser = 'root';

 $cfg_dbpwd = 'root';

 $cfg_db_language = 'utf8';

 // END 配置

 


 //链接数据库

 $link = mysql_connect($cfg_dbhost,$cfg_dbuser,$cfg_dbpwd);

 mysql_select_db($cfg_dbname);

 //选择编码 www.111Cn.net

 mysql_query("set names ".$cfg_db_language);

 

 //users表

 $sql = "desc users";

 

 $res = mysql_query($sql);

 echo "<table><tr>";

 //导出表头(也就是表中拥有的字段)

 while($row = mysql_fetch_array($res)){

  $t_field[] = $row['Field']; //Field中的F要大写,否则没有结果

  echo "<th>".$row['Field']."</th>";

 }

 echo "</tr>";

 //导出100条数据

 $sql = "select * from users limit 100";

 $res = mysql_query($sql);

 while($row = mysql_fetch_array($res)){

  echo "<tr>";

  foreach($t_field as $f_key){

   echo "<td>".$row[$f_key]."</td>";

  }

  echo "</tr>";

 }

 echo "</table>";

 

?>

 

在php连接mssql时查询出来的全部是问题了,这种问题我根据经验知道是编码问题,下面来给各位总结一下解决方法。

方法一,修改php.ini文件 (当然根据你页面情况来设置也可以是utf-8编码了。

 代码如下 复制代码

;mssql.charset = "ISO-8859-1"
mssql.charset = "GBK"

方法二,直接程序中转换

 代码如下 复制代码

iconv('GB2312','UTF-8',$data)

方法三,利用Ado连接在连接时设置编码

$conn = new COM(“ADODB.Connection”, NULL, CP_UTF8) or die(“Cannot start ADO”);  

例子

 代码如下 复制代码
•<html> 
•<head> 
•<meta http-equiv=“Content-Type” content=“text/html; charset=utf-8″> 
•</head> 
•<body> 
•<?php 
•//print(“The next line generates an error.www.111Cn.net<br>”); 
•//printaline(“PLEASE?”); 
•//print(“This will not be displayed due to the above error.”); 
•?> 
• 
•<?php 
• 
•$conn = new COM(“ADODB.Connection”, NULL, CP_UTF8) or die(“Cannot start ADO”);  
•//access 数据库的打开方式 
•//$conn->Open(“Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$db”); 
•//$conn->Open(“DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db”); 
•$conn->Open(“Driver={SQL Server};Server={192.168.22.40};Database=sugarcrm_db;UID=sa;PWD=123456;”) ;  
•// 执行查询并输出数据 
•$rs = $conn->Execute(‘SELECT * FROM accounts’) or die (“error query”); 
•?> 
•<table border=“1″> 
•<tr><th>ID</th><th>Title</th> 
•</tr> 
•<?php 
•while (!$rs->EOF) { 
•  echo ‘<tr>’; 
•  echo ‘<td>’. $rs->Fields['id']->Value .‘</td>’; 
•  echo ‘<td>’. $rs->Fields['name']->Value .‘</td>’; 
•  echo ‘</tr>’; 
•  $rs->MoveNext(); 
•} 
•?> 
•</table> 
•<?php 
•// 释放资源 
•$rs->Close(); 
•$conn->Close(); 
•$rs = null; 
•$conn = null; 
• 
•?> 
•</body> 
•</html> 

总结

一是:数据库类型,其中包括,数据库,表,字段三处都要统一,可以检查一下
二是:文件的编码类型,你若用dw或editplus可以查看页面编码,不同需修改
三是:访问数据库时的设置既set NAMES utf8;
四是:浏览器显示方式,添加meta属性<meta charset=utf-8>

Excel中的日期,php读取之后,变成了类似25569这样的数字,而不是Excel中显示的1970-1-1字符形式。原来excel中的日期是个1900-1-1开始的数字格式。比如1900-1-1是1,1970-1-1是25569。

提供一个读取的函数:

 代码如下 复制代码

//excel日期转换函数
function excelTime($date, $time = false) {
 if(function_exists('GregorianToJD')){
  if (is_numeric( $date )) {
   $jd = GregorianToJD( 1, 1, 1970 );
   $gregorian = JDToGregorian( $jd + intval ( $date ) - 25569 );
   $date = explode( '/', $gregorian );
   $date_str = str_pad( $date [2], 4, '0', STR_PAD_LEFT )
      ."-". str_pad( $date [0], 2, '0', STR_PAD_LEFT )
      ."-". str_pad( $date [1], 2, '0', STR_PAD_LEFT )
      . ($time ? " 00:00:00" : '');
   return $date_str;
  }
 }else{
  $date=$date>25568?$date+1:25569;
  /*There was a bug if Converting date before 1-1-1970 (tstamp 0)*/
  $ofs=(70 * 365 + 17+2) * 86400;
  $date =  date("Y-m-d",($date * 86400) - $ofs).($time ? " 00:00:00" : '');
 }
 return $date;
}

php除了删除文件目录不用用到mysql中的delete之外只要删除mysql数据库中的数据都要用到数据库的命令了,下面我看利用delete来删除数据的例子。

sql有许多对数据库操作的语句。但是常见和比较需要的是这么几个语句 DELETE FROM 语句用于从数据库表中删除记录
 语句:DELETE FROM table_name WHERE column_name = some_value

解说:查询表为:table_name 的字段 column_name 的值为:some_value 的值 

例如:删除表 MyClass中编号为1 的记录

mysql> delete from MyClass where id=1;


列子:  单条删除

 代码如下 复制代码

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("my_db", $con);

mysql_query("DELETE FROM Persons WHERE LastName='Griffin'");

mysql_close($con);
?>

例子,批量删除

批量删除文章这个技术没什么高深莫测的,只是想写下来与大家分享。(适合初学者:)
1、首先在文章列表页面(list.php),将多选筐命名为:“$del_id[]”,值为文章ID号。
     例如(list.php):

 代码如下 复制代码
  <form name="del_form" action="del.php" method="post">
  <?php
        $result=mysql_query("select * from news");
        while($rs=mysql_fetch_array($result)){
     ?>
        <input name="del_id[]" type="checkbox" id="del_id[]" value="<?=$rs[id]?>" /><?=$rs[title]?>
     <?php
        }
     ?>
   </form>

2、处理页面(del.php):

 代码如下 复制代码
 
  <?php
     if($del_id!=""){
             $del_num=count($del_id);
             for($i=0;$i<$del_num;$i++){
                 mysql_query("Delete from news where id='$del_id[$i]'");
             } 
             echo("<script type='text/javascript'>alert('删除成功!');history.back();</script>");
      }else{
             echo("<script type='text/javascript'>alert('请先选择项目!');history.back();</script>");
      }
    ?>  

注释:SQL 对大小写不敏感。DELETE FROM 与 delete from 等效。

为了让 PHP 执行上面的语句,我们必须使用 mysql_query( 函数。该函数用于向 SQL 连接发送查询和命令。 

 

 

标签:[!--infotagslink--]

您可能感兴趣的文章: