PHP实现Mysql远程同步代码
需求: 由于公司的英文网站放置在美国,而这些网站的数据要与大陆的服务器数 据同步。 同步时间在一天之内。 拿到需求之后,发现这两个网站的MYSQL数据库都不能远程访问(安全第一吧)。 于是想起了 平时使用的CSV文件批量录入数据。于是尝试使用CSV导入导出。 导入到处框架如下:
1首先将数据导出成CSV的格式。
建立一文件,放置在中国服务器上:csv.php.其实就是一个导出函数,通过数据 库,表名和SQL语句来获得数据。
/**
* 输出一个数据库中的表到一个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="&;nbsp;";
mysql_connect($host, $user,$pass) or 码如下:" . mysql_error());
mysql_select_db($db);
die("不能连接数据库,错误代
$result $fields_cnt $cc="";
= mysql_query($sql_query);
= my
sql_num_fields($result);
//$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 ,代码如下:
$result $fields_cnt = mysql_query("select * from $table");
= 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 fo