2011-08-17 56 views
0

我有两个数据库($ db1,$ db2)和精确的表结构(table1)。 $ db2.table1有我想插入$ db1.table1的新行(即如果$ db2是新的,$ db1是旧的,我想用$ db2中的新条目更新$ db1)。
我想出了下面的PHP代码,它应该可以正常工作,但我担心列ID中的特殊字符以及要插入的值。
下面的代码:从db1.table1插入新行到db2.table1中

require('update_functions.php'); //contains helper functions 

function arraywalk_mysql_real_escape_string(&$value, &$key, $sql_connection) { 
    $value = mysql_real_escape_string($value, $sql_connection); 
    $key = mysql_real_escape_string($key, $sql_connection); 
} 

$sql_connection_old = connectdb('old'); 
$sql_connection_new = connectdb('new'); 

$table = 'member'; $pkey = 'id'; //table name and primary key 
$last_row_member = mysql_fetch_assoc(last_row($sql_connection_old, $table, $pkey)); 
//fetches last row from old db 

$new_row = new_row($sql_connection_new, $pkey, $last_row_member[$pkey], $table, 'ASC LIMIT 1'); 
//the new_row function executes following query (after sanitizing input) 
//'SELECT * FROM '.$table.' WHERE '.$pkey.'>'.$pkey_value.' ORDER BY '.$pkey.' '.$extra 

while($result = mysql_fetch_assoc($new_row)) { 
    array_walk($result, 'arraywalk_mysql_real_escape_string', $sql_connection_old); 
    $update_member_query = 'INSERT INTO ' . $table . '(' 
        . implode(", ", array_keys($insert_vars)) 
        . ') VALUES (\'' 
        . implode("', '", $insert_vars) 
        . '\')'; 

} 

我不知道是否还会有列名中的特殊字符。我应该把它们放在反引号中吗?
如果是,那么我应该使用mysql_real_escape_srting()来解析它们吗?
VALUES呢?我应该把它们放在引号'value'?如果要插入的值是一个数字会怎样?如果它的日期/时间呢?
有没有一种方法可以绕过从旧数据库获取数据到PHP变量并将其插回到数据库(所以上面的问题变得无关紧要)?

注:即使有两个连接,我有服两个$ DB

回答

0

相同的SQL服务器可以在SQL做到这一点:

INSERT INTO db1.table1 
    SELECT * FROM db2.table1 
    WHERE db2.table1.id > (SELECT MAX(id) FROM db1.table1) 
+0

感谢,可悲的是,我发现了表结构不完全相同,我需要用假数据填充新的数据库,但是非常感谢,我将在将来使用这个构造 – Sudhi 2011-08-17 14:20:41

相关问题