2008-09-26 15 views
1

Für ein neues Projekt, das ich in PHP mache Ich habe eine SQLMethods-Klasse erstellt, um eine Verbindung zur Datenbank herzustellen und Abfragen durchzuführen. Heute Abend war die erste Nacht, an der ich es tatsächlich testen konnte (ich schrieb es vor einer Woche und vergaß es) und ein unerwarteter Fehler trat auf: Als es meine ExecuteQuery() Funktion aufruft, würde es nicht die Datenbank I benutzen im Konstruktor ausgewählt.PHP Klasse Datenbank Verbindung Bereich Ausgabe

Der Konstruktor:

public function SQLMethods() { 
     $SQLConnection = mysql_connect($SQLDBAddress, $SQLUserName, $SQLPassword); 

     if (!$SQLConnection) { 
      die('Could not connect: ' . mysql_error()); 
     } 

     mysql_select_db($SQLDB, $SQLConnection); 
    } 

Die Funktion in Frage:

public function ExecuteQuery($Query) { 
     mysql_query($Query, $SQLConnection) or die('Could not perform query: ' . mysql_error()); 
    } 

Hat jemand sehen, was das Problem sein könnte? Schließt die Verbindung nach Abschluss des Konstruktors?

Antwort

7

sollten Sie $ SQLConnection in Ihrer Klasse deklarieren, und Sie sollten es als

$this->SQLConnection 

und nicht einfach SQLConnection- $ beziehen.

2

$SQLConnection existiert nicht innerhalb der ExecuteQuery Methode.

Sie können es entweder direkt als Parameter an ExecuteQuery übergeben oder eine Klasseneigenschaft sqlConnection hinzufügen, die im Konstruktor festgelegt ist und auf die innerhalb Ihrer Klassenmethoden als $this->sqlConnection zugegriffen wird.

1

Die Variable $SQLConnection versucht zu verwenden wird in einem anderen Bereich erstellt. (Die SQLMethods Funktion).

Die Verbindung wird geschlossen, wenn das PHP-Skript seine Arbeit getan hat, oder wenn Sie es selbst zu schließen (wenn die Verbindung innerhalb dieses Skript gemacht wird)

Sie sollten die $SQLConnection Variable innerhalb ExecuteQuery überspringen, wie durch die php.net angegeben Dokumentation

Wenn die Verbindungskennung nicht angegeben ist, wird die letzte von mysql_connect() geöffnete Verbindung angenommen.