2010-03-25 3 views
0

내가 루프하지만 여러 DBS 현재 DB로 전환 할 수 있도록하려면 여러 데이터베이스에 연결 :PHP - 분리 및

$query = mysql_query("SELECT * FROM `linkedin` ORDER BY id", $CON) or die(mysql_error()); 
if(mysql_num_rows($query) != 0) { 
    $last_update = time()/60; 
    while($rows = mysql_fetch_array($query)) { 
     $contacts_db = "NNJN_" . $rows['email']; 
     // switch to the contacts db 
     mysql_select_db($contacts_db, $CON); 
     $query = mysql_query("SELECT * FROM `linkedin` WHERE token = '" . TOKEN . "'", $CON) or die(mysql_error()); 
     if(mysql_num_rows($query) != 0) { 
      mysql_query("UPDATE `linkedin` SET last_update = '{$last_update}' WHERE token = '" . TOKEN . "'", $CON) or die(mysql_error()); 
     }else{ 
      mysql_query("INSERT INTO `linkedin` (email, token, username, online, away, last_update) VALUES ('" . EMAIL . "', '" . TOKEN . "', '" . USERNAME . "', 'true', 'false', '$last_update')", $CON) or die(mysql_error()); 
     } 
    } 
    mysql_free_result($query); 
} 
// switch back to your own 
mysql_select_db(USER_DB, $CON); 

그것은 삽입 않고 업데이트 다른 데이터베이스의 세부하지만 또한 삽입 내가 원하지 않는 현재 사용자 데이터베이스의 데이터를 편집합니다. 어떤 아이디어?

+0

와우, 얼마나 많은 대역폭을 낭비하고 있는지 상상할 수 있습니다 ... – animuson

+0

와우, 무엇이 건설적이고 도움이 되는가? –

+0

질문의 제목을 다시 지정하십시오. 여러 데이터베이스에 "연결 해제 및 연결"하고 있지 않습니다. 당신은 단순히 스키마를 변경하고 있습니다. – Felix

답변

2

는 PHP를 반환 mysql_select_db() fundtion를 사용하지 마십시오 :

+0

그것은 내가 다시 시작해서 대답이 아니 었습니다 :-) 그러나 이것은 내가 당신에게 감사 한 후에 유용한 정보 인 것 같습니다. –

+0

BTW - 코드를 살펴보면 데이터를 PHP/루프로 가져 오지 않고도 database_name.table_name 구문을 사용하여 DBMS에서 몇 가지 SQL 문을 사용하여이 모든 작업을 수행 할 수 있다고 생각합니다. – symcbean

1

아마도 데이터베이스 디자인이 잘못되었을 수 있습니다. 당신이 발견 한 것처럼 -

INSERT INTO mytable (field_list.....) VALUES (values_list...) 
    ON DUPLICATE KEY 
UPDATE field1 = val1 ... 
1

하나 난 당신이 구문이 같은입니다

를 복제하는 하나의 쿼리를 사용하거나 업데이트 할 수 있다는 것입니다 볼 것을 개선 코드 (및 코더)는 매우 혼란 스럽습니다.

는 명시 적으로 쿼리의 DB를 상태 :

SELECT * FROM main_database.a_table.... 

UPDATE alternate_db.a_table SET... 

REPLACE INTO third_db.a_table... 

C.

0

당신이 $ 쿼리를 재 할당하는 당신의 while 루프 동안. 이것은 이상한 결과를 줄 것이다. 루프 내부의 쿼리에 $ query2를 사용하십시오.