importare dati da database Access in database Mysql

<?php
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function echo_notice ($s) { echo "#NOTICE : $s\n"; }
function 
echo_warning($s) { echo "#WARNING: $s\n"; }
function 
echo_error  ($s) { echo "#ERROR  : $s\n"; }
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function sql_insert($t,$val=array()) {
    return 
"INSERT INTO $t SET ".sql_sequence_val($val).";\n";
}
function 
sql_update($t,$val=array(), $where='') {
    if(
$where!='') { $where=' WHERE '.$where; }
    return 
"UPDATE $t SET ".sql_sequence_val($val).$where;\n";
}
//! ritorna una stringa nella forma a=1,b=2,...
//! da un array associativo nella forma 'a'=>1,'b'=>2
function sql_sequence_val($val) {
    
$str="";
    
$a_regs = array();
    
$field_sep ",";

    foreach(
$val as $k=>$v) {
        if( !empty(
$v) ) {
            if (
is_string($v)) {
            
// non quotare se sembra una funzione come ad esempio now() o sum()
            // da aggiornare con l'uso di una reg exp?
            //if( substr($v,-1) != ')' ){
                if( !ereg('[a-z]+\(([a-z]*)\)'$v$a_regs) ) {
                    
$v "'".mysql_escape_string($v)."'";
                }
            }
            
$str.=$k.'='.$v.$field_sep;
        }
    }
    return 
substr($str,0,-strlen($field_sep) );//tolgo l'ultima ",\n"
}

/*
 * le sql vengono stampate in files che vengono caricate manualmente nel db per facilitare il debug
 *
 *
 */
function mysql_open($h$u$p$db) {
    
$l mysql_connect($h$u$p) or die(mysql_error());
    
mysql_select_db($db$l);
    if( 
$l ) {
        
echo_notice("connected");
        return 
$l;
    } else {
        
echo_error("!connected");
        return 
null;
    }
}

function 
mysql_select_one($sql) {

    if( 
$rs mysql_query($sql) ) {
        if( 
mysql_numrows$rs ) && $a mysql_fetch_array($rs) ) {
            return 
$a[0];
        }
    } else {
        die(
echo_error(__LINE__."\n\n".$sql."\n\n".mysql_error()));
    }
    return 
false;
}

function 
mysql_insert($t$a, &$id) {
    
$id 0;
    
$sql sql_insert($t$a)."\n";
    echo 
$sql;// dbg

    if( mysql_query($sql)) {
        
$id mysql_insert_id();
        return 
true;
    } else {
        die(
echo_error(__LINE__."\n\n".$sql."\n\n".mysql_error()));
    }
}

function 
mysql_update($t$a$where='', &$updated_lines) {
    
$updated_lines 0;
    
$sql sql_update($t$a$where)."\n";
    echo 
$sql;// dbg

    if( mysql_query($sql)) {
        
$updated_lines=mysql_affected_rows();
        return 
true;
    } else {
        die(
"esecuzione della qry [$sql] genera l'errore: ".mysql_error() );
    }
}

function 
mysql_truncate($t) {
    return 
mysql_query("TRUNCATE TABLE $t") or die(__LINE__.' '.mysql_error() );
}


//------------------------------------------------------------------------------
//  access functions
//------------------------------------------------------------------------------

function map_table_sql($access_table$mysql_table$fields_map$opt=array() ) {

    
$sql =  isset( $opt['custom_sql'] ) ? $opt['custom_sql'] : "select * from $access_table;

    
$custom_values =  isset( $opt['custom_values'] ) ? $opt['custom_values'] : array() ;



    
$exc odbc_exec($GLOBALS['access_con'], $sql);

    if(
$exc) {

        while (
odbc_fetch_row($exc)) {
            foreach( 
$fields_map as $acc_field => $mysql_field ) {
            
// ritorna false su errore
                if ( $v odbc_result($exc$acc_field) ) {
                    
$a[$mysql_field] = $v;
                }
            }

            foreach( 
$custom_values as $field => $value ) {
                
$a[$field] = $value;
            }

            echo 
sql_insert($mysql_table$a);
        }
    }
}

function 
ls_tables() {
    
$result odbc_tables($GLOBALS['access_con']);

    
$a = array();
    while (
odbc_fetch_row($result)) {
        if(
odbc_result($result,"TABLE_TYPE")=="TABLE")
            
$a[] =odbc_result($result,"TABLE_NAME");
    }
    return  
$a ;
}

function 
ls_columns($table_name) {
    
$field_names = array();
    
$cols odbc_exec($GLOBALS['access_con'], 'select * from `'.$table_name.'` where 1=2');
    
$ncols odbc_num_fields($cols);
    for (
$n=1$n<=$ncols$n++) {
        
$field_names[] = odbc_field_name($cols$n);
    }
    return 
$field_names;
}
//------------------------------------------------------------------------------
//  actions
//------------------------------------------------------------------------------


function act_AnaLingue() {
    
map_table_sql('AnaLingue''lang', array(
        
'CodLingua' => 'lang_id',
        
'Nome' => 'name'
    
));
}

// ... specificare le altre azioni




function act_list() {
    
$tables ls_tables();
    foreach( 
$tables as $table_name ) {
        echo 
"campi della tabella $table_name \n";
        
$a_col =  ls_columns($table_name) ;
        foreach(
$a_col as $col) {
            echo 
"  $col\n";
        }
    }
}


//------------------------------------------------------------------------------
//  main
//------------------------------------------------------------------------------
set_time_limit(0);

// $dbq = str_replace("/", "\\", "S:\\eco.mdb"); // settata dal wrapper it o fr
if (!file_exists($dbq)) { echo "Crap!<br />No such file as $dbq"; }

$access_con odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbq",
    
"ADODB.Connection"""/*password*/"SQL_CUR_USE_ODBC");

$result odbc_tables($access_con);

if( 
$_SERVER["argc"] < ) {
    
$a_actions = array(
        
'truncate',
        
'AnaLingue',
        
'AnaContinenti',
        
'AnaNazioni',
        
'AnaProvincie',
        
'AnaCap',
        
'AnaLocalita',
        
'AnaZone',
        
'subscriber',
        
'subscription',
        
'cleanup',
        
'list',
        
'populate_zone'

    
);
    die( 
"indica una delle seguenti azioni: \n"implode(",\n"$a_actions) );

} else {
    
$action = isset($_SERVER["argv"][1]) ? $_SERVER["argv"][1] : 'All';


    
$f "act_$action";
    
$f();

}