вставить новые строки из db1.table1 в db2.table1 - PullRequest
0 голосов
/ 17 августа 2011

У меня есть две базы данных ($ db1, $ db2) с точной структурой таблицы (table1).В $ db2.table1 есть новые строки, которые я хочу вставить в $ db1.table1 (т. е. если $ db2 новый, а $ db1 старый, я хочу обновить $ db1 новыми записями из $ db2).
Я пришелсо следующим php-кодом, и он должен работать нормально, но я беспокоюсь о специальных символах в идентификаторах столбцов, а также о значениях, которые будут вставлены в него.
Вот код:

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

1 Ответ

0 голосов
/ 17 августа 2011

Вы можете сделать это в SQL:

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