正確なテーブル構造(table1)を持つ2つのデータベース($ db1、$ db2)があります。$ db2.table1には、$ db1.table1に挿入したい新しい行があります(つまり、$ db2が新しく、$ db1が古い場合、$db1を$db2からの新しいエントリーで更新したいと思います)。
次の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変数へのデータのフェッチとデータベースへの挿入をバイパスできる方法はありますか(上記の質問は無関係になります)?
注:2つの接続がありますが、2つの$dbを提供する同じSQLサーバーがあります