2010-04-23 3 views
1

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

$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); 
} 

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

ответ

5

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

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

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

6

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

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

Во-вторых, вы должны сказать 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); 
} 

Там в последней штучка: Если оба соединения идут на тот же сервер с тем же именем и тем же password, два оператора mysql_connect завершатся тем же идентификатором соединения.

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

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

Все и нужно это изменить строку в Уре код:

$ dbcon2 = mysql_connect (DB_SERVER, DB_USER, пароль_базы_данных, правда) или умереть (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); 
} 
1

Зачем вам такое количество соединений. Это делает вещи более сложными

1

Вы должны:

  • поставить соединительные линии для второй БД вне цикла, как было предложено
  • вы должны указать dbcon1 или 2 в операторе отбора дб
  • добавьте 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^

Смежные вопросы