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 相关文章推荐
配置支持SSI
Nov 25 PHP
php做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 PHP
Yii学习总结之安装配置
Feb 22 PHP
php限制上传文件类型并保存上传文件的方法
Mar 13 PHP
php实现转换ubb代码的方法
Jun 18 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
Oct 29 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 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来自动调用不同服务器上的flash
2006/10/09 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
Python标准库内置函数complex介绍
2014/11/25 Python
spyder常用快捷键(分享)
2017/07/19 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Python实现元素等待代码实例
2019/11/11 Python
Python3运算符常见用法分析
2020/02/14 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
中专自荐信
2013/10/13 职场文书
六十大寿答谢词
2014/01/12 职场文书
公证委托书
2014/08/01 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
Pandas数据结构之Series的使用
2022/03/31 Python
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA