2009-08-13 2 views
1

어떻게 데이터베이스 연결 변수의 선언을 하나만 가질 수 있습니까? $dbconn? 사용자가, 그가 다시 로그인 페이지 PHP의 데이터베이스 연결 변수 이해

  • 에 사용자가 인증되면 발생합니다 인증되지 않은 경우

    내 로그인 스크립트가 following procedure

    1. 을 기반으로, 그는 $_SESSION["logged_in"] = true;
    2. 얻는다 그런 다음 사용자가 기본 페이지 나 인증이 필요한 다른 페이지를 탐색 할 때 $ _SESSION [ "auth"]가 설정되어 있는지 확인합니다.

    나는 단지 내의 index.php의 시작 부분에 데이터베이스 변수가 :

    $dbconn = pg_connect("host=localhost port=5432 dbname=masi user=masi password=123"); 
    

    난 안 어디서나 내 코드에서 db_close()하여 연결을한다. 내 데이터베이스를 사용하는 index.php에 로그인 스크립트를 제공합니다.

    그러나 스크립트에 변수 선언이 없으면 db에 액세스하지 못한다는 표준 경고 메시지가 나타납니다. 내 스크립트에 선언문을 추가하면 db에 액세스 할 수 있습니다.

  • 답변

    2

    데이터베이스 연결의 폭 넓은 세계를 알아 내기 전에 먼저 PHP가 어떻게 쇼를 실행하는지 이해해야합니다.

    각 PHP 페이지 요청이 새로운 PHP 스크립트를 시작합니다. 세션이 켜져있을 수도 있지만 내부 PHP 구조는 입니다. 데이터베이스는 이것을 서버에 연결하는 새로운 연결/프로세스로 간주합니다. 따라서 pg_connect 코드를 호출하는 한 데이터베이스에 대한 새 프로세스를 만듭니다. 그렇지 않으면, Postgres는 자신이 누구인지 또는 어떤 세션을 사용할지 모릅니다. 게다가 부모 프로세스가 죽으면 일반적으로 Postgres 세션을 종료합니다 (이 경우 PHP 스크립트가 실행 된 후 종료됩니다). 때로는 이것들이 좀비를 Postgres의 거리를 떠날 수 있지만, 전체적으로 보면 그냥 죽일뿐입니다.

    PHP 스크립트에서 SQL 코드를 사용하려면 Postgres를 호출하기 전에 스크립트로 데이터베이스에 연결해야합니다.

    +0

    입니다 일하는 것이의 index.php에서

    당신은 login.php를 필요한 경우 함수의 매개 변수로 두 번째 파일로 전달할 수있는 변수로 변환합니다. –

    0

    내가 다른 질문을 기억한다면 login.php로 리디렉션 중입니까? 즉, 다른 페이지에서 초기화 되었기 때문에 dbconn 변수가 존재하지 않습니다. 이 DB에서 데이터를 저장하는 난 그냥 하나의 방법은 데이터베이스 - 연결이있는 파일에서 변수를 얻을 수 있다는 것을 발견

    
    $dbconn = pg_connect("host=localhost port=5432 dbname=masi user=masi password=123"); 
    require_once('login.php'); 
    
    +0

    필자의 실험에 따르면이 사실을 입증 할 수 없다는 것을 알 수있다. index.php에서 $ dbconn 선언을 두 번 내 코드에 두 번 사용하지 않고 login.php가 필요하다. 두 가지 경고가있다. login.php에 $ dbconn 변수를 추가하는 것이 필요합니다. –

    +0

    은 login.php 클래스 또는 함수입니까? 그렇다면 필요한 변수 범위가 없습니다. global $ dbconn을 사용하지 않으면; 함수/클래스 내에서 – rezzif

    +0

    그것은 둘 다 아닙니다. 나는 많은 php 파일에서 코드를 가지고있다. –