2011-08-02 5 views
1

우리는WHMCS MySQL과 다른 MySQL의

  1. 하면 WHMCS 데이터베이스의 각 행에 대한
  2. 에서 데이터를 가져 다소 이러한 작업을 수행하는 일괄 처리 스크립트를 가지고; 행 처리를
    1. 필요한 경우 데이터의 연결은 외부 MySQL 데이터베이스 (원격 서버) 지정된
    2. 페치 프로세스 관련 데이터
    3. 근접 먼 접속
    4. 업데이트 WHMCS 데이터베이스
  3. ...

WHMCS가 reso를 지정하지 않았으므로이 단계는 사소한 일이지만 단계 2.4의 첫 번째 행 이후에 중단됩니다. 두 번째 mysql 연결을 설정하면 기본 WHMCS 쿼리가 중단됩니다. 간단한 코드 무슨 뜻인지 보여줍니다

$result = mysql_query("SELECT * FROM sometable WHERE condition"); 
while ($row = mysql_fetch_assoc($result)) { 
    $conn = mysql_connect($row['mysql_host'], $row['mysql_user'], $row['mysql_pass']); 
    ... 
    mysql_close($conn); 

    mysql_query("UPDATE sometable SET lastrun=NOW() WHERE id={$row['id']}"); 
} 

mysql_query에 두 번째 호출도 모두 실패합니다 두 번째 반복에서 mysql_fetch_assoc에 하나.

이전 연결을 "복원"하여 손상되지 않도록 할 방법이 있습니까? 모든 사람이 $whmcsmysql 리소스 링크를 사방에 사용하도록 제안하지 마십시오. 암호화 된 WHMCS 소스 코드를 수정할 수 없기 때문에 실행 가능한 옵션이 아닙니다.

답변

2

매번 같은 서버에 연결하는 경우 , mysql_connection과 mysql_close를 while 블록 외부로 옮기면 모든 쿼리에 대해 연결과 연결을 끊을 필요가 없다.

그렇지 않으면 WHMCS 데이터베이스에 대한 별도의 연결을 엽니 다 (WHMCS가 무엇인지 모릅니다). 그리고 mysql_query에 대한 호출에서 어떤 연결을 사용하고 있는지 지정하십시오.

또한 누군가가 PDOS/mysqli 강의를 조만간 떠날 것이라고 확신합니다.

+0

나는 기꺼이 PDO (mysqli는 아니지만) 또는 다른 OO DB 클래스를 사용 하겠지만, 이것은 WHMCS (http://whmcs.com/)이며 내부적으로 어떻게 코드화되어 있는가. 두 번째 연결에 대해서는 모든 행마다 다를 수 있으며, 행이 동일 할 것이라는 보장이 없으므로 열어서 닫을 수 있습니다. 스크립트는 cron 작업 (php-cli)으로 실행되기 때문에 행에 둘 이상의 행이 동일한 연결이 이루어진 경우에도 모든 행에 대해 db 연결을 설정하는 데 추가 시간이 필요하지 않습니다. 그럼에도 불구하고 mysql_fetch_assoc ...으로 두 번째 반복문을 입력 할 때 여전히 제안하는 것이 실패한다. –

+0

두 가지 일 수있다. 위에서 편집 한 초기 mysql_query()에 $ WHMCSConn을 지정해야한다. 둘째, $ 결과 변수를 다시 쓸 수 있습니까? 그렇다면, 위에서 편집 한 mysql_fetch_assoc() 부분에서 이름을 변경하십시오. –

+0

지금이 질문을 닫을 것입니다. 결국 연결 정보를 찾을 수 있었고 계층 MySQL에 대한 새 연결을 연 후에 찾은 연결 정보를 사용하여 영구 연결을 사용하여 이전 기본 연결을 "복원"했습니다. 그것은 작동합니다 ... 귀하의 의견을 주셔서 감사합니다. –