将db1.table1中的新行插入db2.table1

时间:2011-08-17 10:44:05

标签: php mysql insert mysql-real-escape-string

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

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变量并将其插回数据库(所以上面的问题变得无关紧要)?

注意:即使有两个连接,我也有相同的SQL服务器为两个$ db

提供服务

1 个答案:

答案 0 :(得分:0)

您可以在SQL中执行此操作:

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