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
感謝,可悲的是,我發現了表結構不完全相同,我需要用假數據填充新的數據庫,但是非常感謝,我將在將來使用這個構造 – Sudhi 2011-08-17 14:20:41