PHP-Klasse-Datenbank-Verbindung Scope Ausgabe
-
02-07-2019 - |
Frage
Für ein neues Projekt, das ich in PHP zu tun Ich habe eine SQLMethods Klasse erstellt, um die Datenbank zu verbinden und Abfragen durchführen. Heute Abend war die erste Nacht, die ich tatsächlich bekam es zu testen (ich es geschrieben habe eine Woche oder so vor und es vergessen) und ein unerwarteter Fehler ist aufgetreten: Als es meine ExecuteQuery () Funktion aufrufen, wäre es nicht die Datenbank Ich benutze im Konstruktor ausgewählt.
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? Ist die Verbindung geschlossen, nachdem der Konstruktor abgeschlossen?
Lösung
Sie sollten $ SQLConnection in Ihrer Klasse deklarieren, und Sie sollten es als
siehe $this->SQLConnection
und nicht einfach $ SQLConnection-.
Andere Tipps
$SQLConnection
existiert nicht innerhalb der ExecuteQuery
Methode.
Sie kann entweder übergeben Sie es direkt als Parameter an ExecuteQuery
oder eine sqlConnection
Klasse Eigenschaft hinzufügen, die im Konstruktor und der Zugriff als $this->sqlConnection
in Ihrer Klassenmethode festgelegt ist.
Die Variable $SQLConnection
ExecuteQuery()
versucht, in einem anderen Rahmen geschaffen zu verwenden. (Die SQLMethods
-Funktion).
Die Verbindung wird geschlossen, wenn der PHP-Skript seine Arbeit getan hat, oder wenn Sie schließen Sie es selbst (wenn die Verbindung innerhalb dieses Skripts gemacht wird)
Sie sollten die $SQLConnection
Variable innerhalb ExecuteQuery
überspringen, wie durch die php.net Dokumentation angegeben
Wenn die Verbindungskennung nicht angegeben ist, das letzte Glied von
mysql_connect()
geöffnet angenommen wird.