2012-02-13 3 views
0

PHP와 MySQL의 데이터베이스 연결에 관한 질문이 있습니다. 데이터베이스 연결을 계속 열어두고 클래스를 사용하여 열고 생성자에서 연결을 정의한 다음 소멸자에서 다시 연결을 닫는 것이 가능한지 궁금합니다.생성자를 통해 데이터베이스에 연결 중, 소멸자를 통해 닫으시겠습니까?

나는 현재 "html"클래스 인 클래스를 가지고 있는데, 레이아웃을 위해이 클래스를 사용하고있다. 이전에 제안한대로 (나중에) 문제, 보안 위험 등을 제기 할 수 있습니까?

감사합니다,

+1

소멸자를 닫을 필요가 없습니다. MySQL 연결은 PHP가 실행을 마칠 때 기본적으로 닫힙니다. 여러 데이터베이스에 연결하는 것과 같이 조기에 연결을 닫을 필요가 없다면 솔직히 걱정하지 않아도됩니다. –

+0

오, 나는 이것을 몰랐다. 브래드에게 감사드립니다. –

답변

1

생성자 내에서 연결을 열고 종종 클래스의 속성에 연결 리소스를 저장하는 것이 일반적입니다.

생성자에서 명시 적으로 데이터베이스 연결을 닫을 수 있지만, PHP가 스크립트에서 더 이상 필요하지 않으면 PHP는 연결을 암시 적으로 닫을 수 있기 때문에 일반적으로 그렇게 할 필요는 없습니다.

class db { 
    public $connection; 

    public function __construct($params...) { 
    $this->connection = mysql_connect(...); 
    if (!$this->connection) { 
     // throw an exception or set an error status... 
    } 
    } 
} 
-1
그것에 대해

하지 않도록,하지만 난 당신이 함수 PARAM 내부의 SQL 연결을 보낼 수 있습니다 알고 있습니다.

0

이렇게 할 수는 있지만 영구 연결을 사용하는 것이 좋습니다. 그러한 객체에 Singleton 패턴을 적용하여 잘못 사용될 가능성이 없도록하는 것이 좋습니다. 또한 연결 자원을 보유하는 구성원 변수를 정적으로 만드는 것을 고려하십시오.

Michael이 말했듯이 스크립트가 끝나면 객체는 사라지 겠지만 원하는 경우 소멸자를 사용하면 스크립트가 특별한 이유없이 종료되기 전에 호출하는 것이 좋습니다.

실제 사용 사례에 따라 데이터베이스 관련 클래스에서 레이아웃 관련 클래스를 분리하는 것이 좋습니다.

+0

특별한 이유가 있습니까? 내 생각에는 내 웹 사이트 레이아웃이 내 "htmlclass"__constructor에 의해 미리 정의되어 있습니다. 따라서 웹 사이트에서 디자인을 사용하여 페이지를 열면 데이터베이스 연결이 이루어 지므로 연결을 생각할 필요없이 쿼리를 실행하면됩니다. –

+0

그것은 분리의 우려, 또는보다 일반적으로 캡슐화라고합니다. 레이아웃 객체는 페이지 요소 렌더링과 관련이 있습니다. 데이터베이스 오브젝트는 데이터베이스 트랜잭션과 관련됩니다. 해결책은 "htmlclass"__constructor에서 내부적으로 데이터베이스 클래스의 인스턴스를 만들거나 사용하는 것입니다. 그래서 그들은 별개이지만 다른 하나는 사용합니다. – Matt

+0

MySql 데이터베이스에 대한 영구 연결? 조언을 다시 생각해 볼 수 있습니다. 특히 트랜잭션 또는 테이블 잠금을 사용할 경우. – Cerad

관련 문제