Как использовать несколько баз данных в веб-приложении PHP?

Я делаю веб-приложение PHP, в котором я использую MySQL в качестве сервера базы данных, я хочу сделать резервную копию некоторых таблиц из одной базы данных в другую базу данных (с этими таблицами в ней). Я создал два разных соединения, но таблица не обновляется.

$dbcon1 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error()); $dbase1 = mysql_select_db(TEMP_DB_NAME,$dbcon)or die(mysql_error()); $query1=mysql_query("SELECT * FROM emp"); while($row = mysql_fetch_array($query1, MYSQL_NUM)) { $dbcon2 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error()); $dbase2 = mysql_select_db(TEMP_DB_NAME2,$dbcon)or die(mysql_error()); mysql_query("INSERT INTO backup_emp VALUES(null,'$row[1]',$row[2])"); mysql_close($dbcon2); } 

приведенный выше код берет данные emp из первой базы данных и обновляет его в другой таблице backup_emp другой базы данных. код не работает должным образом, есть ли другой способ сделать это … пожалуйста, помогите.

    Если обе базы данных находятся на одном сервере, а таблицы имеют одну и ту же схему, то вместо этого вы должны использовать этот запрос:

     mysql_query("INSERT INTO database2.backup_emp SELECT * FROM database1.emp"); 

    Таким образом, вам не нужно беспокоиться о нескольких подключениях к базе данных.

    Прежде всего: вы потенциально открываете сотни подключений, запускаете запрос и закрываете их, чтобы снова открыть их снова.

    Возьмите вторую инструкцию соединения из цикла.

    Во-вторых, вы должны сказать PHP, какая команда предназначена для какого соединения, например:

     $query1 = mysql_query("SELECT * FROM emp", $dbcon1); while($row = mysql_fetch_array($query1, MYSQL_NUM)) { mysql_query("INSERT INTO backup_emp VALUES(null,'$row[1]',$row[2])", $dbcon2); } 

    Есть еще одна маленькая вещь: если оба соединения переходят на тот же сервер с тем же именем пользователя и тем же паролем, два оператора mysql_connect завершатся с тем же идентификатором соединения.

    Вот почему вам нужно установить четвертый оператор (новая ссылка) в вашем втором заявлении на соединение: true:

     $dbcon2 = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD, true) 
     INSERT INTO db2.table SELECT * FROM db1.table 

    зачем вам так много связей. Это усложняет ситуацию

    Вам следует:

    • поместите линии связи для второго DB вне цикла, как было предложено
    • вам нужно указать dbcon1 или 2 в select select db statement
    • добавить true в качестве последнего параметра для второго запроса на соединение
    • проверьте свои значения перед их вставкой (не забывайте, что индекс строки начинается с нуля в PHP, а не 1).

    Наверное, работает так:

     $dbcon1 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error()); $dbase1 = mysql_select_db(TEMP_DB_NAME,$dbcon1) or die(mysql_error()); $dbcon2 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD,true) or die(mysql_error()); $dbase2 = mysql_select_db(TEMP_DB_NAME2,$dbcon2) or die(mysql_error()); $errors= array(); $query1= mysql_query("SELECT * FROM emp"); while($row = mysql_fetch_array($query1, MYSQL_NUM)) { if (!isset($row[1])) $row[1]= 'null'; //or generates an error else $row[1]= "'".$row[1]."'"; if (!isset($row[2])) $row[2]= 'null'; //or generates an error if (mysql_query("INSERT INTO backup_emp VALUES(null,".$row[1].",".$row[2].")") !== true) $errors[]= "Problem inserting values (".$row[1].",".$row[2].")."); } mysql_free_result($query1); mysql_close($dbcon1); mysql_close($dbcon2); 

    Но если вам не нужно делать дополнительные вычисления, проверки или что-либо еще на данных, следующее предложение было хорошим:

     INSERT INTO db2.table SELECT * FROM db1.table 

    Надеюсь, поможет

    C ^

    Все, что вам нужно, – это изменить строку в коде ur:

    $ dbcon2 = mysql_connect (DB_SERVER, DB_USER, DB_PASSWORD, true ) или die (mysql_error ());

     $dbcon1 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error()); $dbase1 = mysql_select_db(TEMP_DB_NAME,$dbcon)or die(mysql_error()); $query1=mysql_query("SELECT * FROM emp"); while($row = mysql_fetch_array($query1, MYSQL_NUM)) { $dbcon2 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD,true) or die(mysql_error()); $dbase2 = mysql_select_db(TEMP_DB_NAME2,$dbcon)or die(mysql_error()); mysql_query("INSERT INTO backup_emp VALUES(null,'$row[1]',$row[2])"); mysql_close($dbcon2); }