php实现mysql同步的实现方法


Posted in PHP onOctober 21, 2009

拿到需求之后,发现这两个网站的MYSQL数据库都不能远程访问(安全第一吧)。于是想起了 平时使用的CSV文件批量录入数据。于是
尝试使用CSV导入导出。
导入到处框架如下:
1首先将数据导出成CSV的格式。
建立一文件,放置在中国服务器上:csv.php.其实就是一个导出函数,通过数据库,表名和SQL语句来获得数据。
csv.php

<?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, user,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 ,代码如下:
<?php 
/** 
* 从一个上传的文件中将数据导入到一个表中 
* 
* @param string Mysql数据库的主机 
* @param string 数据库名称 
* @param string 数据库中的表名 
* @param string 数据库的连接用户名 
* @param string 数据库的连接密码 
* @param string 数据库的表名 
* 
* @return bool 是否执行成功 
* 
* @access public 
*/ 
function uploadFileOfCsv(host,db,user,pass,table,content){ 
mysql_connect(host, user,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("提取的数据如下:<br>".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 "<script language='javascript'>"; 
echo "alert('第".i."行的ID空,请检查!');"; 
echo "location.href=document.referrer;"; 
echo "</script>"; 
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 <br>"; 
fwrite(fd,log); 
fclose(fd); 
} 
} 
?>

3调用函数执行导出
在中国服务器上再建立一个 文件:test_export.php,调用前面的csv.php的函数,然后将数据转成CSV,然后临时存到一个表单的
textera中,注意表单提交的位置:
<?php 
require_once("csv.php"); 
host="localhost"; 
db="project"; 
user="root"; 
pass=""; 
//导出tb_contact表的数据为csv文件 
filename = 'file4.csv'; 
cc=PMA_exportData( host,db,user,pass, filename,"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"> 
<p> 
<textarea name="textarea" cols="180" rows="30"><?php echo cc?></textarea> 
<input type="hidden" name="action" value="1"/> 
</p> 
<p> 
<input type="submit" name="Submit" value="提交"> 
</p> 
</form>

再在美国服务器上防置如下文件用于接受上传上来的数据,文件名为 test_import.php:
<?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,db,user,pass,"tb_project_dvp",content); 
} 
?>

最后 利用Windows-xp/nt/03 控制面版中自带 任务计划,调度执行中国服务器test_export.php文件即可
PHP 相关文章推荐
基于mysql的bbs设计(一)
Oct 09 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
Oct 13 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
PHP自动生成表单代码分享
Jun 19 PHP
php导出生成word的方法
Dec 25 PHP
CI配置多数据库访问的方法
Mar 28 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
php源码 fsockopen获取网页内容实例详解
Sep 24 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
php 魔术方法使用说明
Oct 20 #PHP
关于Appserv无法打开localhost问题的解决方法
Oct 16 #PHP
php foreach、while性能比较
Oct 15 #PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 #PHP
php 数学运算验证码实现代码
Oct 11 #PHP
用mysql触发器自动更新memcache的实现代码
Oct 11 #PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 #PHP
You might like
全世界最小的php网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
PHP数据类型的总结分析
2013/06/13 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
python爬取音频下载的示例代码
2020/10/19 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
学校食堂采购员岗位职责
2013/12/05 职场文书
社区中秋节活动方案
2014/01/29 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
淘宝客服工作职责
2014/07/11 职场文书
村安全生产责任书
2014/08/25 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
医院志愿者活动总结
2015/05/06 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
如何有效防止sql注入的方法
2021/05/25 SQL Server