2010-04-23 2 views
1

나는 데이터베이스 서버로 MySQL을 사용하고있는 PHP 웹 애플리케이션을 만들고 있는데, 데이터베이스의 일부 테이블을 다른 데이터베이스로 백업하려고한다. 두 개의 다른 연결을 만들었지 만 테이블은 업데이트되지 않습니다.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); 
} 

위의 코드는 첫 번째 데이터베이스에서 emp의 데이터를 가져 와서 다른 데이터베이스의 다른 backup_emp 테이블로 updataing하고 있습니다. 코드가 제대로 작동하지 않습니다. 다른 방법이 있습니까? 도움을주십시오.

답변

5

가 같은 서버에있는 두 데이터베이스의 경우, 및 테이블 : 당신이 두 번째 연결 명령문에서 네 번째로 문 (새 링크) true로 설정해야하는 이유

은 그입니다 동일한 스키마를 가지고 있다면 다음 쿼리를 사용해야합니다.

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

마지막 작은 일이있다 : 모두 연결이 동일한 사용자 이름과 동일한와 같은 서버로 이동하는 경우 암호를 사용하면 두 개의 mysql_connect 문은 동일한 연결 ID로 종료됩니다.

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

U 필요한 것은 UR 코드 라인을 변경하는 것이다

dbcon2 = $로 mysql_connect (DB_SERVER, DB_USER, DB_PASSWORD, 진정한) 또는() (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

당신이해야 :

  • 당신이 선택 dB 문에 dbcon1 또는 2를 지정해야합니다 제안
  • 로 루프 외부에서 두 번째 DB의 연결 라인을 넣어
  • 두 번째 연결 요청에 마지막 매개 변수로 true를 추가하십시오. (PHP에서 행 인덱스가 0에서 시작하고 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^

희망이 도움
관련 문제