2009-08-13 22 views
1

Wie können Sie nur eine Deklaration der Datenbankverbindungsvariable $dbconn haben?Die Datenbankverbindungsvariable von PHP verstehen

Mein Login-Skript basiert auf dem following procedure

  1. Wenn der Benutzer nicht authentifiziert ist, wird er wieder auf der Login-Seite geworfen
  2. Wenn der Benutzer authentifiziert ist, erhält er eine $_SESSION["logged_in"] = true;
  3. Wenn der Benutzer die Hauptseite oder andere Seiten, die Auth benötigen, durchsucht, prüft er einfach, ob $ _SESSION ["auth"] gesetzt ist.

Ich habe die Datenbankvariable erst am Anfang meiner index.php:

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

ich nicht die Verbindung von db_close() überall in meinem Codes. I Quelle mein Login-Skript zu index.php, die meine Datenbank verwendet.

Allerdings bekomme ich die Standardwarnungen, keinen Zugriff auf db zu bekommen, wenn ich die Variablendeklaration nicht auch in meinen Skripten habe. Wenn ich die Deklaration zu jedem meiner Skripte hinzufüge, bekomme ich Zugriff auf db.

Antwort

2

Wir müssen zuerst verstehen, wie PHP die Show hier ausführt, bevor wir uns in die weite Welt der Datenbankverbindungen vertiefen können.

Jede PHP-Seitenanforderung löst ein neues PHP-Skript aus. Während Sie Sitzungen aktiviert haben können, ist dies ein internes PHP-Konstrukt nur. Die Datenbank sieht dies als eine neue Verbindung/einen neuen Prozess, der eine Verbindung zum Server herstellt. Daher erstellt es einen neuen Prozess in der Datenbank dafür, solange Sie Ihren Code pg_connect aufrufen. Ansonsten hat Postgres keine Ahnung, wer Sie sind oder welche Sitzung Sie verwenden möchten. Wenn der Elternprozess stirbt, wird außerdem die Postgres-Sitzung beendet (in diesem Fall wird das PHP-Skript ausgeführt und stirbt dann, sobald es fertig ist). Manchmal können diese Zombies die Straßen von Postgres durchstreifen, aber im Großen und Ganzen werden sie sie einfach umbringen.

Wenn Sie SQL-Code in Ihre PHP-Skript verwenden möchten, müssen Sie in die Datenbank in dass Skript an, bevor Sie einen Anruf an Postgres zu machen.

+0

ich gerade herausgefunden, dass ein Weg, um die Variable aus der Datei, die die Datenbank -Anschluss hat, um die Daten von db arbeiten würde sparen an eine Variable, die dann als Parameter der Funktion an die zweite Datei übergeben werden kann. –

0

Wenn ich mich an Ihre andere Frage erinnere, verweisen Sie auf login.php? Das bedeutet, dass die Variable dbconn nicht existiert, weil sie auf einer anderen Seite initialisiert wurde.

wenn Sie login.php benötigt, um von index.php es


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

Mein Experiment zeigt mir, dass diese Tatsache nicht wahr sein kann: Ich benötige login.php aus index.php, ohne die $ dbconn-Deklaration zweimal in meinen Codes - zwei Warnungen. Es scheint notwendig zu sein, die Variable $ dbconn zu login.php hinzuzufügen. –

+0

ist login.php eine Klasse oder eine Funktion? Wenn dies der Fall ist, wird es nicht den erforderlichen variablen Bereich haben. es sei denn, Sie verwenden globale $ dbconn; aus der Funktion/Klasse – rezzif

+0

Es ist keiner von ihnen. Ich habe die Codes nur in vielen PHP-Dateien. –