私はオンラインで探していましたが、出くわしたすべての記事は少し違うことを言っているようです。結果セットを操作していて、結果をリリースする前にプログラムが終了した場合、正確には何が起こりますか?
それが常に起こることを確実にするためのより良い方法はありますか?データベース接続についても同じことが言えます。
if($statement->fetch()) {
exit("Result!");
}
$statement->free_result();
はfree_result
、データベースエンジンに結果セットを解放できることを通知します。
大きな結果セットを返すクエリに使用されているメモリの量が心配な場合にのみ呼び出す必要があります。関連するすべての結果メモリは、スクリプトの実行の最後に自動的に解放されます。
register_shutdown_function
結果がメモリから解放されていることを確認するために使用できます
function shutdown(){
global $statement;
if($statement){
$statement->free_result();
}
}
register_shutdown_function('shutdown');
PHPで使用register_shutdown_function
して、関数/多くの関数が終了時に起動することを確認できます。この例では、ifステートメントを次のように変更することもできます。
$exitResult = null;
if($statement->fetch()) {
$exitResult = "Result!";
}
$statement->free_result();
if ($exitResult !== null) exit($exitResult);
ただし、ほとんどのプラグイン/拡張機能(データベースなどに接続する)は、PHPプロセスのシャットダウン後(スクリプトの最後)にクリーンアップされることに注意してください。
これをクラスで使用する場合は、への参照を保存してから、クラスで関数を$statement
使用できます。__destruct