Na základě komentářů se zdá, že problém je způsoben použitím require_once()
uvnitř funkce.
Děje se jedna ze dvou věcí. Buď:
-
Již jste zahrnuli
Connection.php
někde jinde, takže když se dostanete k funkci, ve skutečnosti není zahrnuta.. kvůli jednomu součástírequire_once
.nebo...
-
Je funguje při prvním volání funkce, ale při druhém volání je soubor již zahrnut a nebude znovu zahrnut.
Problém je v tom, že když je soubor poprvé zahrnut (za předpokladu, že je to z této funkce), $connection
proměnná je vytvořena v rozsahu funkce a jako každá jiná funkční proměnná je na konci funkce pryč. Když funkci zavoláte podruhé, k zahrnutí nedojde, protože používáte require_once
.
Pravděpodobně byste to mohli opravit voláním require()
místo require_once()
, ale to skončí opětovným připojením k databázi pokaždé, když funkci zavoláte - což je spousta zbytečné režie. Je mnohem čistší přesunout zahrnutí mimo funkci a buď předat spojení do funkce, nebo jej použít jako globální proměnnou.
To by vypadalo takto:
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());
}
Jak již bylo řečeno, tento kód má 2 hlavní problémy.
-
Používáte
mysql_*
funkce, které jsou zastaralé a budou brzy odstraněny z nových verzí PHP. Další podrobnosti naleznete v této otázce:Proč by neměl Nepoužívám funkce mysql_* v PHP?Ve skutečnosti není tak těžké přejít na něco jako
mysqli_*
funkce místo toho – existuje neobjektová sada funkcí, které jsou téměř totožné s tím, co nyní používáte. -
Zahrnujete do dotazu proměnnou, aniž byste ji správně escapovali. Přinejmenším byste měli volat
mysql_real_escape_string()
(nebomysqli_real_escape_string()
), ale lepším řešením je podívat se do připravených výpisů. Více informací o připravených výpisech naleznete zde:Jak mohu zabránit vkládání SQL v PHP?