PHP Classes
elePHPant
Icontem

File: DBBackup.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Raul  >  DB Backup Class  >  DBBackup.class.php  >  Download  
File: DBBackup.class.php
Role: Class source
Content type: text/plain
Description: Class
Class: DB Backup Class
Generate a MySQL database backup using PDO
Author: By
Last change:
Date: 4 years ago
Size: 5,216 bytes
 

Contents

Class file image Download
<?php
/**
 *
 * Use this class to do a backup of your database
 * @author Raul Souza Silva (raul.3k@gmail.com)
 * @category Database
 * @copyright No one. You can copy, edit, do anything you want. If you change anything to better, please let me know.
 *
 */
Class DBBackup {
   
/**
     *
     * The host you will connect
     * @var String
     */
   
private $host;
   
/**
     *
     * The driver you will use to connect
     * @var String
     */
   
private $driver;
   
/**
     *
     * The user you will use to connect to a database
     * @var String
     */
   
private $user;
   
/**
     *
     * The password you will use to connect to a database
     * @var String
     */
   
private $password;
   
/**
     *
     * The database you will use to connect
     * @var String
     */
   
private $dbName;
   
/**
     *
     * String to connect to the database using PDO
     * @var String
     */
   
private $dsn;

   
/**
     *
     * Array with the tables of the database
     * @var Array
     */
   
private $tables = array();

   
/**
     *
     * Hold the connection
     * @var ObjectConnection
     */
   
private $handler;
   
/**
     *
     * Array to hold the errors
     * @var Array
     */
   
private $error = array();

   
/**
     *
     * The result string. String with all queries
     * @var String
     */
   
private $final;

   
/**
     *
     * The main function
     * @method DBBackup
     * @uses Constructor
     * @param Array $args{host, driver, user, password, database}
     * @example $db = new DBBackup(array('host'=>'my_host', 'driver'=>'bd_type(mysql)', 'user'=>'db_user', 'password'=>'db_password', 'database'=>'db_name'));
     */
   
public function DBBackup($args){
        if(!
$args['host']) $this->error[] = 'Parameter host missing';
        if(!
$args['user']) $this->error[] = 'Parameter user missing';
        if(!isset(
$args['password'])) $this->error[] = 'Parameter password missing';
        if(!
$args['database']) $this->error[] = 'Parameter database missing';
        if(!
$args['driver']) $this->error[] = 'Parameter driver missing';

        if(
count($this->error)>0){
            return;
        }

       
$this->host = $args['host'];
       
$this->driver = $args['driver'];
       
$this->user = $args['user'];
       
$this->password = $args['password'];
       
$this->dbName = $args['database'];

       
$this->final = 'CREATE DATABASE ' . $this->dbName.";\n\n";

        if(
$this->host=='localhost'){
           
// We have a little issue in unix systems when you set the host as localhost
           
$this->host = '127.0.0.1';
        }
       
$this->dsn = $this->driver.':host='.$this->host.';dbname='.$this->dbName;

       
$this->connect();
       
$this->getTables();
       
$this->generate();
    }

   
/**
     *
     * Call this function to get the database backup
     * @example DBBackup::backup();
     */
   
public function backup(){
       
//return $this->final;
       
if(count($this->error)>0){
            return array(
'error'=>true, 'msg'=>$this->error);
        }
        return array(
'error'=>false, 'msg'=>$this->final);
    }

   
/**
     *
     * Generate backup string
     * @uses Private use
     */
   
private function generate(){
        foreach (
$this->tables as $tbl) {
           
$this->final .= '--CREATING TABLE '.$tbl['name']."\n";
           
$this->final .= $tbl['create'] . ";\n\n";
           
$this->final .= '--INSERTING DATA INTO '.$tbl['name']."\n";
           
$this->final .= $tbl['data']."\n\n\n";
        }
       
$this->final .= '-- THE END'."\n\n";
    }

   
/**
     *
     * Connect to a database
     * @uses Private use
     */
   
private function connect(){
        try {
           
$this->handler = new PDO($this->dsn, $this->user, $this->password);
        } catch (
PDOException $e) {
           
$this->handler = null;
           
$this->error[] = $e->getMessage();
            return
false;
        }
    }

   
/**
     *
     * Get the list of tables
     * @uses Private use
     */
   
private function getTables(){
        try {
           
$stmt = $this->handler->query('SHOW TABLES');
           
$tbs = $stmt->fetchAll();
           
$i=0;
            foreach(
$tbs as $table){
               
$this->tables[$i]['name'] = $table[0];
               
$this->tables[$i]['create'] = $this->getColumns($table[0]);
               
$this->tables[$i]['data'] = $this->getData($table[0]);
               
$i++;
            }
            unset(
$stmt);
            unset(
$tbs);
            unset(
$i);

            return
true;
        } catch (
PDOException $e) {
           
$this->handler = null;
           
$this->error[] = $e->getMessage();
            return
false;
        }
    }

   
/**
     *
     * Get the list of Columns
     * @uses Private use
     */
   
private function getColumns($tableName){
        try {
           
$stmt = $this->handler->query('SHOW CREATE TABLE '.$tableName);
           
$q = $stmt->fetchAll();
           
$q[0][1] = preg_replace("/AUTO_INCREMENT=[\w]*./", '', $q[0][1]);
            return
$q[0][1];
        } catch (
PDOException $e){
           
$this->handler = null;
           
$this->error[] = $e->getMessage();
            return
false;
        }
    }

   
/**
     *
     * Get the insert data of tables
     * @uses Private use
     */
   
private function getData($tableName){
        try {
           
$stmt = $this->handler->query('SELECT * FROM '.$tableName);
           
$q = $stmt->fetchAll(PDO::FETCH_NUM);
           
$data = '';
            foreach (
$q as $pieces){
                foreach(
$pieces as &$value){
                   
$value = htmlentities(addslashes($value));
                }
               
$data .= 'INSERT INTO '. $tableName .' VALUES (\'' . implode('\',\'', $pieces) . '\');'."\n";
            }
            return
$data;
        } catch (
PDOException $e){
           
$this->handler = null;
           
$this->error[] = $e->getMessage();
            return
false;
        }
    }
}
?>