拿到需求之后,发现这两个网站的MYSQL数据库都不能远程访问(安全第一吧)。于是想起了 平时使用的CSV文件批量录入数据。于是 尝试使用CSV导入导出。 导入到处框架如下: 1首先将数据导出成CSV的格式。 建立一文件,放置在中国服务器上:csv.php.其实就是一个导出函数,通过数据库,表名和SQL语句来获得数据。 csv.php <div class="codetitle"><a style="CURSOR: pointer" data="19967" class="copybut" id="copybut19967" onclick="doCopy('code19967')"> 代码如下:<div class="codebody" id="code19967"> <?php / 输出一个数据库中的表到一个CSV文件中 @param string Mysql数据库的主机 @param string 数据库名称 @param string 数据库中的表名 @param string 数据库的连接用户名 @param string 数据库的连接密码 @param string 数据库的表名 @param string 数据库的 @param string 错误页面 @param string SQL语句 @return text 返回CSV格式的内容 @access public / function PMA_exportData(host,db,user,pass,filename,table,crlf,error_url,sql_query) { what="csv"; csv_terminated=" "; csv_separator=","; csv_enclosed=" "; csv_escaped=""; mysql_connect(host,pass) or die("不能连接数据库,错误代码如下:" . mysql_error()); mysql_select_db(db); result = mysql_query(sql_query); fields_cnt = mysql_num_fields(result); cc=""; //fp = fopen(filename,'w'); // 格式化数据 while (row = mysql_fetch_row(result)) { schema_insert = ''; for (j = 0; j < fields_cnt; j++) { if (!isset(row[j]) || is_null(row[j])) { schema_insert .="NULL"; //用什么来替换空值 } elseif (row[j] == '0' || row[j] != '') { // loic1 :用引号包含字段值 if (csv_enclosed == '') { schema_insert .= row[j]; } else { schema_insert .= csv_enclosed . str_replace(csv_enclosed,csv_escaped . csv_enclosed,row[j]) . csv_enclosed; } } else { schema_insert .= ''; } if (j < fields_cnt-1) { schema_insert .= csv_separator; } } // end for // fwrite(fp,schema_insert . csv_terminated); cc.=schema_insert . csv_terminated; } // end while mysql_free_result(result); // fclose(fp); return cc; } ?> 2.将CSV格式的内容导入到表中 在美国服务器上建立个导入的文件,放置:import.php,代码如下: <div class="codetitle"><a style="CURSOR: pointer" data="11681" class="copybut" id="copybut11681" onclick="doCopy('code11681')"> 代码如下:<div class="codebody" id="code11681"> <?php / 从一个上传的文件中将数据导入到一个表中 @param string Mysql数据库的主机 @param string 数据库名称 @param string 数据库中的表名 @param string 数据库的连接用户名 @param string 数据库的连接密码 @param string 数据库的表名 @return bool 是否执行成功 @access public / function uploadFileOfCsv(host,content){ mysql_connect(host,pass) or die("不能连接数据库,错误代码如下:" . mysql_error()); mysql_select_db(db); result = mysql_query("select from table"); fields_cnt = mysql_num_fields(result); test2=array(array()); rownum=0; log("提取的数据如下: ".content); fd1 = fopen ("C:test.csv",'a'); fwrite(fd1,content); fclose(fd1); fp = fopen("C:test.csv","r"); while (buffer = fgets(fp,4096)) { i++; tmp_arr = explode(",",buffer); if(trim(tmp_arr[0]) == ""){ echo ""; exit; } query = "INSERT INTO db.table"; query .=" values ( "; for(q=0;q<fields_cnt;q++){ if(q==fields_cnt-1){ tmp=tmp_arr[q]; query.="'tmp');"; }else{ tmp=tmp_arr[q]; query.="'tmp',"; } }//end for(q=0; log2(query); mysql_query(query); } fclose(fp); return "OK"; unlink("C:test.csv"); } function log2(event = null){ //global db; // global login; if(LOG_ENABLED){ now = date("Y-M-d H:i:s"); fd = fopen ("C:log.html",'a'); log = now." "._SERVER["REMOTE_ADDR"] ." - event "; fwrite(fd,log); fclose(fd); } } ?> 3调用函数执行导出 在中国服务器上再建立一个 文件:test_export.php,调用前面的csv.php的函数,然后将数据转成CSV,然后临时存到一个表单的 textera中,注意表单提交的位置: <div class="codetitle"><a style="CURSOR: pointer" data="89655" class="copybut" id="copybut89655" onclick="doCopy('code89655')"> 代码如下:<div class="codebody" id="code89655"> <?php require_once("csv.php"); host="localhost"; db="project"; user="root"; pass=""; //导出tb_contact表的数据为csv文件 filename = 'file4.csv'; cc=PMA_exportData( host,"tb_project_dvp","","test.php","select * from tb_project_dvp") ; handle = fopen(filename,"rb"); contents = fread(handle,filesize (filename)); fclose(handle); ?> <form id="form1" name="form1" method="post" action="http://美国网站的地址/test2.php">
<textarea name="textarea" cols="180" rows="30"><?php echo cc?> <input type="hidden" name="action" value="1"/>
<input type="submit" name="Submit" value="提交">
再在美国服务器上防置如下文件用于接受上传上来的数据,文件名为 test_import.php: <div class="codetitle"><a style="CURSOR: pointer" data="29175" class="copybut" id="copybut29175" onclick="doCopy('code29175')"> 代码如下:<div class="codebody" id="code29175"> <?php require_once("csv.php"); require_once("import.php"); host="localhost"; db="wintopweb"; user="root"; pass=""; if(_POST['action']=="1"){ content=_POST['textarea']; echo uploadFileOfCsv(host,content); } ?> 最后 利用Windows-xp/nt/03 控制面版中自带 任务计划,调度执行中国服务器test_export.php文件即可 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|