2009-11-13 2 views
-1

다음은 내 DB 연결 클래스입니다. 문제는 내 코드에서 CloseConnection 함수에 액세스하려고하면 "알 수없는 MySQL 로컬 호스트"오류가 발생한다는 것입니다. 내 다른 코드 파일을 통해 "dbconnection :: CloseConnection"을 사용합니다. 성공적으로 연결을 열고 있지만 "$ conn"에 오류가 있습니다. 클래스의 연결 변수가 연결을 닫는 동안 오류를 생성합니다.

public static function InsertRecord($inQuery) 
{ 
    dbconnection::OpenConnection(); 
    $resultSet = mysql_query($inQuery); 
    dbconnection::CloseConnection(); 
    return $resultSet;  
} 

나는 "dbconnection :: CloseConnection()"줄을 제거

, 그것은 잘 작동 : 아래
final class dbconnection 
{ 

    private $conn; 
     //Opens connection for a MySQL DB 
     public static function OpenConnection() 
     { 
      require("../Config/dbconfig.php"); 
      $conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD); 

      mysql_select_db('MyDB'); 

     } 

     //Closes connection for a MySQL DB 
     public static function CloseConnection() 
     { 
      mysql_close($conn); 

     } 
} 

내가 위의 기능에 액세스 곳에서 다른 PHP 파일의 방법이다. 또한 DB 작업이 완료되면 즉시 연결을 닫는 것이 좋은 방법인지 또는 사용이 브라우저를 닫을 때까지 계속 열어야하는지 알고 싶습니다.

+0

왜 정적 클래스 대신 전역 함수와 변수를 사용하지 않으시겠습니까? – hakre

답변

2

시도 :

당신이 $conn 변수 멤버에 액세스하려고하고있는하지만 당신은 단순히 사용할 새 (로컬) 변수를 만들 수 있도록 당신이 잘못하고있어 무엇
class dbconnection { 
    private static $conn; 

    public static function OpenConnection() { 
    require("../Config/dbconfig.php"); 
    self::$conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD); 
    mysql_select_db('MyDB'); 
    } 

    public static function CloseConnection() { 
    mysql_close(self::$conn); 
    } 
} 

. 오픈시에는 상관 없지만 (참조는 단순히 삭제됩니다) 닫으면 리소스 참조를 더 이상 다루지 않습니다.

둘째, 함수는 정적이지만 멤버 변수는 정적이 아닙니다.

class A { 
    private $a; 
    private static $b; 

    public static function foo() { 
    $this->a = 3; // instance member 
    self::$b = 4; // static member 
    } 
} 

편집 : :이 멤버 변수에 액세스 사용하는 두 가지 방법이 있습니다 더 이상를 통해 데이터베이스 연결에 액세스하려고 때문에 CloseConnection()에 전화를 제거 할 때 마지막 함수에 대한를, 그것은 작동 지역 변수 $conn (오류가 발생 함).

아니요. 데이터베이스 연결을 즉시 닫는 것이 좋지 않습니다. PHP에서 가장 일반적으로 사용되는 방법은 스크립트 상단에서 연결을 연 다음 더 이상 아무것도하지 않는 것입니다. 스크립트가 종료되면 닫힙니다. 요구에 따라 연결을 열어주는 사람도 있습니다. 연결이 필요할 때까지 연결을 시도하지 않습니다. 이는 불필요한 복잡성을 추가하지 않는 관점에서 수용 가능한 최적화입니다. 일반적으로 연결은 명시 적으로 닫히지 않습니다. 스크립트가 끝나면 암시 적으로 닫힙니다.

장시간 사용하는 스크립트는 오랜 기간 동안 불필요하게 열린 연결을 유지하지 않으므로 다른 접근 방식을 취할 수도 있습니다.

어떤 시점에서는 영구 연결을 대신 사용하려고 할 수 있습니다.

위의 방법은 꽤 간단하고 꽤 큰 일부 사이트에 충분합니다. 일반적으로이 작업을 최적화하지 말고 불필요한 복잡성을 도입하지 마십시오. 실제로 문제가 발생할 때까지 기다려야합니다.

+0

@cletus : 마지막 질문은 어떻습니까? – RKh

관련 문제