2013-08-28 4 views
0

최근에 PHP 프로젝트에서 ext/mysql에서 mysqli로 전환했습니다. 이 프로젝트에서 new_link 매개 변수를 false으로 설정하여 연결 재사용 기능 mysql_connect을 광범위하게 사용했습니다.Share mysqli connection

내가 이해하는 한, mysqli_connect에는 그러한 메커니즘이 없습니다. 동일한 호스트와 사용자가 사용 되더라도 항상 새로운 연결을 반환합니다. 이 올바른지? 재사용 동작을 모방 할 수있는 다른 기능이 있습니까?

NB : 호스트 앞에 p:을 추가하면 영구 연결이 생성됩니다. 그러나, 내 프로젝트의 일부로 임시 테이블을 사용하여 내 경우에는이 사용할 수 없습니다.

업데이트 :
실제 mysqli 개체가 데이터베이스에 대한 액세스를 관리하는 DB 핸들러 클래스에 포함된다. 이 처리기는 항상 DB와 상호 작용하는 데 사용됩니다.

mysqli가 동일한 매개 변수를 사용하여 mysqli_connect을 여러 번 호출하여 단일 연결을 자동으로 재사용 할 수 있는지 질문에 집중하고 싶기 때문에 문제를 단순화했습니다. 내 프로젝트는 프레임 워크의 확장이며 다중 진입 점과 후크를 제공합니다. 필자는 호스팅 프레임 워크에서 내 확장에 대한 함수 호출의 순서 또는 수를 제어 할 수 없습니다. 내 확장의 각 부분은 DB 핸들러의 인스턴스를 작성하지만 실제 기본 연결을 재사용 할 수 있습니다.

DB 처리기 작성은 db-factory를 통해 수행됩니다. 그래서 나는 확실하게 어떤 종류의 연결을 구현해야 할 것입니다. 직접 캐싱을해야합니다 ...

+0

지속적 연결로 인해 풀을 다시 사용하도록 유지해야하지 않습니까? '지속적인 연결 뒤에있는 아이디어는 클라이언트 프로세스와 데이터베이스 간의 연결을 여러 번 생성하고 파괴하는 것이 아니라 클라이언트 프로세스에서 재사용 할 수 있다는 것입니다. " – Prix

+0

영구 연결을 사용하면 temp에 문제가 발생할 수 있다고 생각했습니다. 테이블을 만들었고 서버 구성을 제어 할 수 없기 때문에이 기능을 사용하지 않을 것입니다. 그러나 같은 스크립트에서 여러 번 영구 연결을 열면 연결을 닫지 않고 * 항상 동일한 연결을 반환하는지 알 수는 없습니다. * –

+0

시행 및 오류;) – Prix

답변

0

아니요, mysqli ext는 그 게으른 mysql ext 동작을 따르지 않습니다.
그래서 항상 mysqli 객체를 명시 적으로 처리해야한다. 그러나 유일한 문제는 가변 범위입니다. 하지만 $mysqli 개체를 볼 수만 있다면 괜찮을 것입니다.

그러나 또 다른 문제가 있습니다. 응용 프로그램 코드에 $mysqli 개체를 지정하면 안됩니다. 그것은 오래된 mysql ext의 문제점이었고 mysqli ext에서도 문제가 있습니다 - 은 응용 프로그램 코드에서 그대로 사용하도록되어 있지 않습니다.

래퍼을 만들어야 모든 데이터베이스 관련 항목을 캡슐화 할 수 있으며 응용 프로그램 코드에서는 항상이 래퍼 클래스 만 사용합니다.

그래서 래퍼를 만들어 인스턴스를 만들고 모든 클래스와 함수를 매개 변수로 전달하십시오.

+0

나는 그것을 단순화했습니다 ... 저는 래퍼와 그것을 만드는 공장을 사용합니다! 내 업데이 트를 확인 –

+0

그럼 전혀 문제가 없어야합니다 –