How to implement mysql synchronization in php_PHP tutorial
Jul 21, 2016 pm 03:43 PM
After getting the requirements, I found that the MYSQL databases of these two websites cannot be accessed remotely (security first). Then I remembered the CSV file I usually use to enter data in batches. So
try to use CSV import and export.
The import framework is as follows:
1 First export the data into CSV format.
Create a file and place it on the Chinese server: csv.php. It is actually an export function that obtains data through the database, table name and SQL statement.
csv.php
<?php
/**
* Output a table in the database to a CSV file
*
* @param string Mysql database host
* @param string Database name
* @param string Table in the database Name
* @param string database connection username
* @param string database connection password
* @param string database table name
* @param string database
* @param string error page
* @param string SQL statement
*
* @return text Return content in CSV format
*
* @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("Unable to connect to the database, the error code is as follows: " . mysql_error());
mysql_select_db(db);
result = mysql_query(sql_query);
fields_cnt = mysql_num_fields(result);
cc="";
//fp = fopen(filename, 'w' );
//Format data
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"; //What to use to replace the null value
} elseif (row[j] == '0' || row[j] != '') {
// loic1 : Enclose field value in quotes
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. Import the content in CSV format into the table
Create an imported file on the US server and place: import.php, code As follows:
<?php
/**
* Import data from an uploaded file into a table
*
* @param string Mysql database host
* @param string database name
* @param string database Table name
* @param string Database connection username
* @param string Database connection password
* @param string Database table name
*
* @return bool Whether to execute Success
*
* @access public
*/
function uploadFileOfCsv(host,db,user,pass,table,content){
mysql_connect(host, user,pass) or die("Unable to connect to the database, the error code is as follows: " . mysql_error());
mysql_select_db(db);
result = mysql_query("select * from table");
fields_cnt = mysql_num_fields(result);
test2=array(array());
rownum=0;
log("The extracted data is as follows: <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('The ID of line ".i." is empty, please check! ');";
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 Call the function to perform the export
Create another file on the Chinese server: test_export.php, call the function of the previous csv.php, then convert the data into CSV, and then temporarily save it to a form
In textera, pay attention to the location of form submission:
<?php
require_once( "csv.php");
host="localhost";
db="project";
user="root";
pass="";
//Export the tb_contact table The data is a csv file
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://US website address/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="Submit">
</p>
</form>
Then set up the following file on the US server to accept the uploaded data, the file name is 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);
}
?>
Finally, use the built-in task plan in the Windows-xp/nt/03 control panel to schedule and execute the Chinese server test_export.php file.

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian

How to fix mysql_native_password not loaded errors on MySQL 8.4
