PHP Classes
elePHPant
Icontem

File: class

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Wayne Philip  >  Yet Another Sync for db (MySQL)  >  class  >  Download  
File: class
Role: Application script
Content type: text/plain
Description: Test - Execution script
Class: Yet Another Sync for db (MySQL)
Synchronize MySQL databases
Author: By
Last change:
Date: 3 years ago
Size: 8,892 bytes
 

Contents

Class file image Download
<?
class __sync
{
var
$db; // database Name
var $host; // data server host name or ip
var $usr; // database user (check rights id buggy)
var $pass; // databade user password
var $array_tables; // array for table names
var $tbl; // active table
var $link; // active internal link
var $debug; // optional 0 or 1
var $array_wc; // where clause array
var $array_dc; // where clause array
var $path_files; // location for files
var $dte_files; // location for files
var $out_content; // output contyents
var $array_sync_files; // nasme of sync file array
var $curr_file; //current active file (part of $array_sync_files)
var $big_file_query; // read of file for sync
var $array_sub_queries; // $big_file_query split into individual queries
var $ht = ""; // ht ouput
//
##
public function get_ht()
{
    return
$this->ht;
}
##
public function connect_target_do($host, $db, $usr, $pass)
{
   
$this->db = trim($db);
   
$this->usr = trim($usr);
   
$this->pass = trim($pass);
   
$this->host = trim($host);
   
$this->mk_connect_and_use();
   
$this->set_import_of_files();
   
}
##
private function set_import_of_files()
{
   
$cnt = count($this->array_sync_files);
    for(
$n=0;$n<$cnt;$n++)
    {
       
$this->curr_file = $this->array_sync_files[$n];
       
$this->ht .="<p>&rArr;&rArr;Sync of <b>{$this->curr_file}</b> started </p>";
       
$this->sync_this_file();
    }
}
private function
sync_this_file()
{
    if(!
basename($this->curr_file))
    {
       
$this->ht .="<p>&rArr;&rArr;&rArr; <b>Sync Error {$this->curr_file}</b> DOES NOT EXIST </p>";
    }
    else
    {
       
$this->ht .="<p>&rArr;&rArr;&rArr;Sync of <b>{$this->curr_file}</b> commensing .. file exists </p>";
        if(!empty(
$this->curr_file))
        {
           
$fp = fopen($this->curr_file, "r") or die ("{$this->curr_file} won't open");
           
$this->big_file_query = addslashes(fread($fp, 10240000));
           
fclose($fp);
           
$this->split_sql_read_file_and_execute();
           
$this->ht .="<p>&rArr;&rArr;&rArr;&rArr;<b>{$this->curr_file}</b> COMPLETE</p>";
        }
        else
        {
          
$this->ht .="<p>&rArr;&rArr;&rArr;<b>{$this->curr_file}</b> not accessed or not readable or empty</p><hr>";
        }
    }
}
##
private function split_sql_read_file_and_execute()
{
   
$__tmp = trim($this->big_file_query);
   
$__tmp_array = explode("*||*", $__tmp);
   
$cnt = count($__tmp_array);
   
$executed = 0;
   
$this->ht .="<p>&rArr;&rArr;&rArr;Number of potential items in <b>{$this->curr_file}</b> = $cnt</p>";
   
$this->array_sub_queries = $__tmp_array;
    for(
$r=0;$r<$cnt;$r++)
    {
       
$__tmp_item = trim($this->array_sub_queries[$r]);
        if((
strlen($__tmp_item) > 10) AND (!(substr($__tmp_item, 0, 1) == "#")))
        {
           
$__tmp_item = stripslashes($__tmp_item);
           
mysql_query ($__tmp_item);
           
$executed++;
        }
    }
   
$this->ht .="<p>&rArr;&rArr;&rArr;Number of sub queries executed in <b>{$this->curr_file}</b> = $executed</p>";
}


##
private function get_table_output()
{
    
$dc = "";
    
$wc = "";
    
// try to get the dc clause
    
$cnt = count($this->array_dc);
     if(
$cnt > 0)
     {
         for(
$h=0;$h<$cnt;$h++)
         {
             if(
$this->array_dc[$h]['table'] == $this->tbl)
             {
                
$dc .= "\n"."DELETE FROM {$this->tbl} WHERE ({$this->array_dc[$h]['dc']});*||*";
             }
         }
     }
    
$this->ht .="<p>&rArr;&rArr;&rArr;DELETE stements for <b>{$this->tbl}</b> are..{$dc}</p>";
    
// try to get the select where clause .. may only be one .. dont' be a dork
    
$cnt = count($this->array_wc);
     if(
$cnt > 0)
     {
         for(
$h=0;$h<$cnt;$h++)
         {
             if(
$this->array_wc[$h]['table'] == $this->tbl)
             {
                
$wc .= "WHERE ({$this->array_wc[$h]['wc']});*||*"."\n";
             }
         }
     }
    
$query = "SELECT * FROM {$this->tbl} $wc";
    
$this->ht .="<p>&rArr;&rArr;&rArr;Sync Creeation QUERY is <b>{$query}</b></p>";
    
$this->out_content .="\n"."## ".$query;
    
$actual_query = str_replace("*||*", "", $query);
    
$result = mysql_query($actual_query,$this->link);
    
$all_query = '';
    
$__ccnntt = 0;
     while(
$row = mysql_fetch_row($result))
     {
        
// replace statement
        
$str_query = "\n"."REPLACE INTO {$this->tbl} VALUES (";
         for(
$i=0; $i<mysql_num_fields($result);$i++)
         {
            if(!isset(
$row[$i])) $str_query .= "NULL,";
            else if(
$row[$i] != "") $str_query .= "'".$row[$i]."',";
            else
$str_query .= "'',";
         }
        
$str_query .= ")";
        
$str_query = str_replace(",)", ")", $str_query);
        
$str_query .= ";*||*";
        
$str_query = ereg_replace(",$","",$str_query);
        
$all_query .= $str_query;
        
$__ccnntt++;
     }
    
$tmp__ht = "<b>$__ccnntt</b> RESULTS";
     if(
$__ccnntt = 0)
     {
        
$tmp__ht = "<b>NO RESULTS</b>";
     }
    
$this->ht .="<p>&rArr;&rArr;&rArr;{$tmp__ht} for <b>{$this->tbl}</b></p>";
    
$this->out_content .= $dc."\n\n".$all_query."\n\n".$dc."\n"."## EOF({$this->tbl});*||*";
}
##
public function set_date_setting()
{
   
$this->dte_files = date("YmdHis");
   
$this->ht .="<p>&rArr;&rArr;Date Vars (this import session) set as <b>{$this->dte_files}</b></p>";
}
##
public function create_sync_output()
{
   
$this->out_content = "## SyncFile created on {$this->dte_files};*||*"."\n";
   
$this->ht .="<p>&rArr;&rArr;&rArr;Output Started as {$this->out_content }</p>";
    for (
$i=0; $i < count($this->array_tables); $i++ )
    {
       
$this->tbl = $this->array_tables[$i];
       
$this->get_table_output();
       
$fn = $this->path_files."yas_".$this->dte_files."_".$this->tbl."_sql.php"; // use PHP extention for security on web-servers
       
$this->array_sync_files[$i] = $fn;
       
$fp = fopen ($fn,"w");
       
fwrite ($fp,$this->out_content);
       
fclose ($fp);
       
$tmp_bytes = filesize($fn);
       
$this->ht .="<p>&rArr;&rArr;&rArr;Output for <b>{$fn}</b> created with <b>$tmp_bytes</b> bytes - Max is <b> 204,800 </b> </p>";
    }
}
##
public function set_files_path($path)
{
   
$this->path_files = $path;
    return;
}
##
public function set_where_delete($dc)
{
    if(!isset(
$this->array_dc))
    {
       
$cnt = 0;
    }
    else
    {
       
$cnt = count($this->array_dc);
    }
   
$expl_this_one = explode("|", $dc);
   
$this->array_dc[$cnt]['table'] = trim($expl_this_one[0]);
   
$this->array_dc[$cnt]['dc'] = trim($expl_this_one[1]);
   
$this->ht .= "<p>&rArr;&rArr;Delete clause set for IMPORT on sync table {$this->array_dc[$cnt]['table']} as {$this->array_dc[$cnt]['wc']}</p>";
}
##
public function set_where_select($wc)
{
    if(!isset(
$this->array_wc))
    {
       
$cnt = 0;
    }
    else
    {
       
$cnt = count($this->array_wc);
    }
   
$expl_this_one = explode("|", $wc);
   
$this->array_wc[$cnt]['table'] = trim($expl_this_one[0]);
   
$this->array_wc[$cnt]['wc'] = trim($expl_this_one[1]);
   
$this->ht .= "<p>&rArr;&rArr;Where clause set for extract from {$this->array_wc[$cnt]['table']} as {$this->array_wc[$cnt]['wc']}</p>";
}
##
public function set_debug($opt)
{
   
$this->debug = (int)$opt;
}
##
public function set_tables_4_output($host, $db, $usr, $pass, $tbl)
{
   
$this->db = trim($db);
   
$this->usr = trim($usr);
   
$this->pass = trim($pass);
   
$this->host = trim($host);
    if(
$tbl == "all") // we want all the tables
   
{
       
$this->array_tables = $this->get_tablenames();
    }
    else
    {
       
$this->array_tables[0] = trim($tbl);
    }
   
$this->ht .= "<p>&rArr;&rArr;Attempting connection to <b> {$this->host}.{$this->db}.{$tbl}</b> as <b>{$this->usr}</b></p>";
   
$this->mk_connect_and_use();
}
private function
mk_connect_and_use()
{
    if(
is_resource($this->link))
    {
       
mysql_close($this->link);
    }
   
$this->link = @mysql_connect($this->host,$this->usr,$this->pass);
    if(!
is_resource($this->link))
    {
       
$err = mysql_error();
       
$this->ht .= "<p>&rArr;&rArr;Link error &rArr; ($err) ..No Connetion resource for Cttl-- {$this->host}..{$this->usr}</p>";
    }
    else
    {
       
$this->ht .= "<p>&rArr;&rArr;Success Connetion resource for -- <b>{$this->host}</b>..<b>{$this->usr}</b></p>";
       
mysql_select_db($this->db) or die("no usage of {$this->db} possible");
    }
}
##
private function get_tablenames()
{
   
$result = mysql_list_tables($this->db,$this->link);
    while (
$row = mysql_fetch_row($result))
    {
       
$this->array_tables[] = $row[0];
    }
    return
$tables;
}
##
}

?>