Basierend auf den Kommentaren klingt es so, als ob das Problem durch die Verwendung von require_once()
verursacht wird innerhalb einer Funktion.
Eines von zwei Dingen passiert. Entweder:
-
Sie haben
Connection.php
bereits eingebunden woanders, also wenn Sie zu der Funktion kommen, ist sie nicht wirklich enthalten ... wegen der Einmal Teil vonrequire_once
.oder...
-
Es ist funktioniert beim ersten Aufruf der Funktion, aber beim zweiten Aufruf ist die Datei bereits inkludiert und wird nicht noch einmal inkludiert.
Das Problem besteht darin, dass beim erstmaligen Einbinden der Datei (vorausgesetzt, dies erfolgt innerhalb dieser Funktion) die $connection
Die Variable wird im Funktionsbereich erstellt und ist wie jede andere Funktionsvariable am Ende der Funktion verschwunden. Wenn Sie die Funktion ein zweites Mal aufrufen, findet das Einschließen nicht statt, weil Sie require_once
verwenden .
Sie könnten dies wahrscheinlich beheben, indem Sie require()
aufrufen statt require_once()
, aber das wird jedes Mal, wenn Sie die Funktion aufrufen, eine erneute Verbindung zur Datenbank herstellen - was viel unnötigen Overhead bedeutet. Es ist viel sauberer, das Include einfach außerhalb der Funktion zu verschieben und die Verbindung entweder in die Funktion zu übergeben oder sie als globale Variable zu verwenden.
Das würde so aussehen:
require_once('Connection.php');
function getResult() {
global $connection;
$findQuery = "SELECT * FROM `Keys` WHERE `ID` = '$gID'";
$findResult = mysql_query($findQuery, $connection) or die(mysql_error());
$resultRow = mysql_fetch_assoc($findResult) or die(mysql_error());
}
Abgesehen davon gibt es zwei Hauptprobleme mit diesem Code.
-
Sie verwenden den
mysql_*
Funktionen, die veraltet sind und bald aus neuen PHP-Versionen entfernt werden. Siehe diese Frage für weitere Details:Why shouldn verwende ich nicht mysql_*-Funktionen in PHP?Es ist eigentlich gar nicht so schwer, auf so etwas wie
mysqli_*
umzusteigen Funktionen stattdessen - es gibt einen Nicht-Objekt-Satz von Funktionen, die fast identisch mit dem sind, was Sie jetzt verwenden. -
Sie schließen eine Variable in Ihre Abfrage ein, ohne sie ordnungsgemäß zu maskieren. Zumindest sollten Sie
mysql_real_escape_string()
aufrufen (odermysqli_real_escape_string()
), aber eine bessere Lösung besteht darin, sich vorbereitete Anweisungen anzusehen. Weitere Informationen zu vorbereiteten Anweisungen finden Sie hier:Wie kann ich SQL-Injection in PHP verhindern?