Я делаю веб-приложение 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
зачем вам так много связей. Это усложняет ситуацию
Вам следует:
Наверное, работает так:
$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); }