PX : code

Upload ODBC table to by Søren Roug
Download this code


<?php
/*
 * This include file defines the functions html_header and html_footer
 */
require("design.inc");
$mysqldb "concord";

function 
nonfatal_error($message)
{
    
printf("<H1>%s</H1>\n",$message);
}


function 
upload_records($odbcfd,$myfd,$mysqldb,$table)
{
/*
* Figure out which columns the mysql database has
*/
    
$fieldlist mysql_list_fields($mysqldb,$table);
    
$numof  mysql_num_fields($fieldlist);
    for(
$i 0$i $numof$i++)
    {
        
$fieldname mysql_field_name($fieldlist,$i);
        if(
$i == 0)
            
$columnlist $fieldname;
        else
            
$columnlist $columnlist "," $fieldname;
        
$fieldtype mysql_field_type($fieldlist,$i);
        switch(
$fieldtype)
        {
        case 
"string":
        case 
"datetime":
            
$fieldquotes[$fieldname] = "'";
            break;
        default:
            
$fieldquotes[$fieldname] = "";
            break;
        }
    }
/*
* Query the ODBC database and loop through the result.
*/
    
$res odbc_exec($odbcfd,"SELECT * FROM $table");
    if(
$res == 0)
    {
        
nonfatal_error("Couldn't exec SELECT statement on ODBC database");
        return(
0);
    }
/*
* Now we know we can query the ODBC database we can delete the records from
the Mysql
* database
*/
    
mysql_db_query($mysqldb,"DELETE FROM $table",$myfd);
    
$rowinx 0;
    while(
odbc_fetch_row($res))
    {
/*
* Generate the SQL INSERT STATEMENT
*/
        
for($i 0$i $numof$i++)
        {
            
$fieldname mysql_field_name($fieldlist,$i);
            if(
$i == 0)
                
$vallist $fieldquotes[$fieldname] .
                   
addslashes(odbc_result($res,$fieldname)) .
                   
$fieldquotes[$fieldname] ;
            else
                
$vallist $vallist "," $fieldquotes[$fieldname] .
                   
addslashes(odbc_result($res,$fieldname)) .
                   
$fieldquotes[$fieldname] ;
        }
        
$cmd "INSERT INTO $table ($columnlist) VALUES ($vallist)";
    if(
$rowinx 10 == 0)
        echo 
"<br>";
    
printf("%06s\n",$rowinx);
        if(
mysql_db_query($mysqldb,$cmd,$myfd) == 0)
        {
            
nonfatal_error(mysql_error());
        }
        
$rowinx++;
    }
    return(
1);
}

/*-----------------------------------------------------------------
* Start of the program
*/

/*
* Connect to the MySQL server
*/
$myfd mysql_connect("atilia","guest","xxxx");
if(
$myfd <= 0)
{
    
nonfatal_error("Couldn't open MySQL database");
    exit(
$myfd);
}
/*
* Connect to the ODBC ressource.
* The DSN must be defined in the executing computer's ODBC tables
*/
$odbcfd odbc_connect("ConcAccess","x","e");
if(
$odbcfd <= 0)
{
    
nonfatal_error("Couldn't open ODBC database");
    exit(
$odbcfd);
}
function 
list_tables($mysqldb)
{
    echo 
"<UL>\n";
    
$tablesmysql_list_tables($mysqldb);
    for(
$i 0$i mysql_num_rows($tables);$i++)
    {
        
printf("<LI>Upload table <A HREF=\"upload.php3?table=%s\">%s</A>\n",
            
mysql_tablename($tables,$i),
            
mysql_tablename($tables,$i));
    }
    echo 
"</UL>\n";
}
switch (
$table)
{
case 
"":
    
html_header("Update Database on mysql");
?>
<P>This page allows you to upload tables from the MS-Access database to the
database
on the webserver. There <I>might</I> be some uploading errors. This is the
reason
you can only upload one table at a time. You should select a table and then
look at the
result for errors.</P>
<?php
    list_tables
($mysqldb);
    break;
default:
    
html_header("Uploading $table");
    echo (
"Row ## Row ## Row ## Row ## Row ## Row ## Row ## Row ## Row ##
Row ##<br>\n"
);
    
$tablesmysql_list_tables($mysqldb);
    
$dotable=0;
    for(
$i 0$i mysql_num_rows($tables); $i++)
        if(
mysql_tablename($tables,$i) == $table)
        {
             
$dotable=1;
        }
    if(
$dotable == 1)
        
upload_records($odbcfd,$myfd,$mysqldb,$table);
    else
        
nonfatal_error("There was no such table");

    
list_tables($mysqldb);
    break;
}
odbc_close($odbcfd);
mysql_close($myfd);
html_footer();
?>


Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.