Baseret på kommentarerne lyder det til, at problemet er forårsaget af brug af require_once()
inde i en funktion.
En af to ting sker. Enten:
-
Du har allerede inkluderet
Connection.php
et andet sted, så når du kommer til funktionen, er den faktisk ikke inkluderet.. på grund af en gang del afrequire_once
.eller...
-
Det er fungerer første gang du kalder funktionen, men anden gang du kalder den, er filen allerede inkluderet og bliver ikke inkluderet igen.
Problemet er, at når filen først inkluderes (forudsat at det er fra denne funktion), er $connection
variabel oprettes i funktionsomfanget, og er ligesom enhver anden funktionsvariabel væk i slutningen af funktionen. Når du kalder funktionen en anden gang, sker inkluderingen ikke, fordi du bruger require_once
.
Du kan sikkert løse dette ved at kalde require()
i stedet for require_once()
, men det ender med at oprette forbindelse til databasen igen, hver gang du kalder funktionen - hvilket er en masse unødvendige overhead. Det er meget renere blot at flytte include uden for funktionen og enten overføre forbindelsen til funktionen eller bruge den som en global variabel.
Det ville se sådan ud:
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());
}
Når det er sagt, er der 2 store problemer med denne kode.
-
Du bruger
mysql_*
funktioner, som er forældet og snart vil blive fjernet fra nye versioner af PHP. Se dette spørgsmål for flere detaljer:Hvorfor burde Bruger jeg ikke mysql_*-funktioner i PHP?Det er faktisk ikke så svært at skifte til noget som
mysqli_*
funktioner i stedet - der er et ikke-objekt sæt funktioner, der er næsten identiske med det, du bruger nu. -
Du inkluderer en variabel i din forespørgsel uden at undslippe den korrekt. Du bør i det mindste kalde
mysql_real_escape_string()
(ellermysqli_real_escape_string()
), men en bedre løsning er at se på udarbejdede erklæringer. Du kan finde mere information om udarbejdede erklæringer her:Hvordan kan jeg forhindre SQL-injektion i PHP?