コメントによると、問題の原因はrequire_once()
を使用しているようです。 関数内。
2つのうちの1つが起こっています。どちらか:
-
すでに
Connection.php
が含まれています 他の場所にあるので、関数に到達したとき、実際には含まれていません。1回のためrequire_once
の一部 。または...
-
です 関数を最初に呼び出すときは機能しますが、2回目に呼び出すときは、ファイルはすでに含まれており、再び含まれることはありません。
問題は、ファイルが最初に含まれるとき(それがこの関数内からのものであると仮定して)、$connection
変数は関数スコープで作成され、他の関数変数と同様に、関数の最後で削除されます。関数を2回呼び出すと、require_once
を使用しているため、インクルードは発生しません。 。
require()
を呼び出すことでこれを修正できる可能性があります require_once()
の代わりに 、ただし、関数を呼び出すたびにデータベースに再接続することになります。これは、多くの不要なオーバーヘッドです。インクルードを関数の外に移動し、接続を関数に渡すか、グローバル変数として使用する方がはるかにクリーンです。
これは次のようになります:
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());
}
そうは言っても、このコードには2つの大きな問題があります。
-
mysql_*
を使用しています 非推奨であり、PHPの新しいバージョンから間もなく削除される関数。詳細については、次の質問を参照してください:なぜすべきでないのかPHPでmysql_*関数を使用しませんか?mysqli_*
のようなものに切り替えるのは実際にはそれほど難しいことではありません 代わりに関数-現在使用しているものとほぼ同じ非オブジェクトの関数セットがあります。 -
変数を適切にエスケープせずにクエリに含めています。少なくとも、
mysql_real_escape_string()
を呼び出す必要があります (またはmysqli_real_escape_string()
)が、より良い解決策は、準備されたステートメントを調べることです。プリペアドステートメントの詳細については、次を参照してください: PHPでSQLインジェクションを防ぐにはどうすればよいですか?