//定义的备份处理Database类
<?php
/**
* 数据备份类
*/
class Database
{
protected $host;
protected $username;
protected $password;
protected $dbname;
/**
* 简单说明
*/
//array_keys() 函数返回包含数组中所有键名的一个新数组。
//array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。
//addslashes() 函数在指定的预定义字符前添加反斜杠。
//array_map() 函数返回用户自定义函数作用后的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致
//join() 函数把数组元素组合为一个字符串。
/**
* 链接数据库
*/
public function connect()
{
if (!mysql_connect("$this->host","$this->username","$this->password")) {
return false;
}
if (!mysql_select_db("$this->dbname")) {
return false;
}
return true;
}
/**
* 读取数据,功能:循环读取数据每张表,再获取每张table的创建结构,再获取insert语句,组合成.sql文件里面的数据结构,最后把获取到的数据赋给变量$mysql,再return出去
*/
public function getdata()
{
$mysql = "SET FOREIGN_KEY_CHECKS=0;\r\nset charset utf8;\r\n";
$sql = mysql_query("show tables");
while ($t = mysql_fetch_array($sql)) {
//获取表名
$table = $t[0];
//获取创建的table的结构:$sql
$createtable = mysql_query("show create table $table");
$createtable = mysql_fetch_array($createtable);
$mysql .= "DROP TABLE IF EXISTS '$table'" . ";\r\n";
$mysql .= @$createtable['Create Table'] . ";\r\n";
//获取表里面的数据
$result = mysql_query("select * from $table");
while ($data = mysql_fetch_assoc($result)) {
$keys = array_keys($data);
$keys = array_map('addslashes', $keys);
$keys = join(',',$keys);
$keys = "'".$keys."'";
$value = array_values($data);
$value = array_map('addslashes', $data);
$value = join(',',$value);
$mysql .= "insert into '$table'($keys) values($value);\r\n";
}
}
return $mysql;
}
/**
* 备份数据:功能:获取getdata()方法获取到的.sql文件内容,然后设置备份命名规则,此处设置的是当前位置,根据自己再去定义,然后打开文件写入内容,再关闭写入权限
*/
public function backup($mysql)
{
$filename = $this->dbname . date('Ymjgi') . ".sql";
$fp = fopen($filename, 'w');
fputs($fp,$mysql);
fclose($fp);
}
//执行:功能:传值,运行上面定义好的方法,最后反馈状态
public function runprogram($host,$username,$password,$dbname)
{
$this->host = $host;
$this->username = $username;
$this->password = $password;
$this->dbname = $dbname;
//判断链接数据库
$status = self::connect();
if ($status == false) {
return false;
}
mysql_query("set names utf8"); //链接正常选择数据库后再设置编码,注意顺序
//读取数据
$mysql = self::getdata();
//写入数据
self::backup($mysql);
return true;
}
}
?>
调用方法:
<?php
require 'Database.php';
header("Content-type: text/html; charset=utf-8");
$db = New Database();
$status = $db->runprogram('127.0.0.1','root','','robot'); //$host,$username,$password,$dbname
if ($status) {
echo '备份成功';
}else{
echo '备份失败,请核对数据';
}
?>