2010-02-14 4 views
4

저는 대학 프로젝트를 위해 PHP로 간단한 웹 응용 프로그램을 만들고 있습니다. MySQL 데이터베이스를 사용하고 있습니다.다른 PHP 페이지에서 동일한 MySQL 연결 사용

나는 login.php에서 데이터베이스에 연결합니다. 연결 후 $ _SESSION [ "conn"]에 연결을 지정하고 main.php로 리디렉션합니다.

main.php에서 나는 $ conn = $ _SESSION [ "conn"]이라고 씁니다. 그러나 $ conn의 연결은 작동하지 않습니다.

login.php 스크립트가 끝날 때 연결이 닫히는 것으로 생각했습니다. 그래서 mysql_connect 대신 mysql_pconnect를 사용해 보았습니다.하지만 역시 작동하지 않습니다.

모든 PHP 파일에서 데이터베이스에 다시 연결할 수 있다는 것을 알고 있습니다. 그러나 나는 이것을하고 싶지 않다. 모든 PHP 파일에서 동일한 연결을 사용하고 싶습니다.

+2

http 세션에 이러한 객체를 저장하지 마십시오 ( – cherouvim

+1

). @cherouvim - 당신이 * 세션을 시작할 때 리소스를 절약 할 수 없다고 생각하면 이상하게 들릴 수 있습니다. – Charles

+0

@Charles : 나는 상점을 의미했습니다. 이것이 PHP에서 할 수 있는지 없는지. – cherouvim

답변

9

세션에 DB 연결을 저장하는 대신 연결 호출을 db.php와 같은 별도의 파일로 작성한 다음 각 스크립트에서 호출해야합니다.

mysql_connect('...', '...', '...'); 
mysql_select_db('...'); 

을 다음 login.php에서 그것을에서 가져 : 예를 들어, db.php를에 연결을 배치

require('db.php'); 
$res = mysql_query('...'); 

당신은 할 다음 수에 대한 액세스를 필요로 각 PHP 파일에 대해 동일한 DB를 사용하면 한 파일에서 DB 액세스 자격 증명을 변경해야합니다.

+0

멋진 바지 :) 좋은 하나! –

2

두 번째 요청은 첫 번째 요청과 동일한 웹 서버 프로세스에서 제공하지 않을 수 있습니다. 즉, 완전히 다른 데이터베이스 리소스 집합을 갖게됩니다. 쿼리를 실행하려면이 새로운 프로세스에서 다시 연결해야합니다.

6

연결 후 $ _SESSION [ "conn"]에 연결을 지정한 다음 main.php로 리디렉션합니다.

아마도 PHP sessions을 읽어 보시기 바랍니다. serialized이 될 수 없으므로 세션에 리소스 (데이터베이스 연결, 파일 핸들 등)를 저장할 수 없습니다.

PHP 스크립트를 방문 할 때마다 PHP 인터프리터의 새 인스턴스를 (CGI, FastCGI 또는 내장 모듈을 통해) 호출하고 스크립트의 새 인스턴스를 호출한다는 점에 유의하십시오. 스크립트가 끝날 때 전체 환경이 사라지기 때문에 스크립트 호출 간에는 아무 것도 공유되지 않습니다.

다른 답변은 정확합니다. 모든 스크립트 호출에서 데이터베이스에 연결해야합니다. 편의를 위해 공통 인클루드 파일에 연결을 배치하십시오.

0

내가 일반적으로 갖고있는 것은 연결을 설정하기 위해 페이지에 필요한 연결 클래스입니다.

class Connection { 
    public $dbConnection = null; 
    public $isConnectionActive = false; 
    private $dbServer = null; 
    private $dbCatalog = null; 
    private $dbUser = null; 
    private $dbPassword = null; 
} 

이 클래스는 모든 페이지에서 연결 열기 및 닫기를 처리합니다.

0

당신은 php 연결을 persistant하게 만들고 싶습니다. 그렇게한다면, 연결을 시도 할 새로운 PHP PDO 객체를 생성하기 위해 필요한 매개 변수를 가진 PDO 객체를 만들어야합니다. mysql, 그리고 인스턴스 instanciation에서 true로 persistancy 옵션 값을 전달하려고하면 모든 PHP 스크립트에서 동일한 PDO Connection Objetc를 사용할 수 있지만 그 방법으로 문제를 마주하게 될 것입니다 ...하지만 PHP 프로그래밍 최고의 Pratices로 reconmmanded되지 않습니다 ... 이렇게하는 가장 좋은 방법은 프로젝트의 모든 스크립트에 대한 연결 파일을 포함하는 것입니다. 최근의 PHP 버전에서 특히 이러한 연결 객체에 대해 발견 된 문제에 대해 자세히 알아 보려면 지속적인 연결에 대한 PHP 문서를 읽어보십시오. PHP 지속적인 연결로 인해 서버 작업 부하가 증가 할 수 있으므로 지속적인 연결이 끊임없이 중단됨을 발표했습니다. 너무 늦었다면 죄송합니다.

관련 문제