簡體   English   中英

將新行從 db1.table1 插入 db2.table1

[英]insert new rows from db1.table1 into db2.table1

我有兩個具有精確表結構(table1)的數據庫($db1,$db2)。 $db2.table1 有我想插入到 $db1.table1 的新行(即,如果 $db2 是新的而 $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()解析它們嗎?
價值觀呢? 我應該將它們括在引號'value'中嗎? 如果要插入的值是一個數字怎么辦? 如果它的日期/時間怎么辦?
有沒有辦法可以繞過從舊數據庫中獲取數據到 PHP 變量並將其插入回數據庫(因此上述問題變得無關緊要)?

注意:即使有兩個連接,我也有相同的 SQL 服務器為兩個 $db 服務

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM