準備されたmysqliステートメントを完成させるときに$ stmt-> close()と$ stmt-> free_result()の違いを明確にしようとしています。
これまでのところ私は使用します:
$mysqli = new mysqli(Host,user,password,database);
$stmt = $mysqli->prepare(sql statement);
[...]
$stmt->free_result();
$mysqli->close();
そして、すべてが正常に機能しているようです。
しかし、多くのプログラマーが$ stmt-> free_result()の代わりに$ stmt-> closeを使用しているのを見てきました。そして、私がそれらの両方を見たら:
$stmt->free_result();
$stmt->close();
$mysqli->close();
では、どのような状況で、なぜ、何を選ぶべきでしょうか?
$stmt->free_result()
は結果セットに関連するメモリを解放しますが、$stmt->close()
はプリペアドステートメントに関連するメモリを解放します。その後、$stmt->close()
を呼び出すと、まだ残っている結果がキャンセルされます。
本質的に、$stmt->close()
を呼び出すと、結果セットもキャンセルされるため、$stmt->free_result()
を呼び出すのと同じ効果が得られます。ただし、$stmt->free_result()
を呼び出しても、プリペアドステートメントで使用されているメモリはクリアされません。その場合は、$stmt->close()
を使用する必要があります。
どちらを使用するかについては、初期化したプリペアドステートメントを使用するつもりであるが、現在の結果セットは不要になった場合があります。このような場合、プリペアドステートメントが完了するまで$stmt->close()
の呼び出しを待ち、代わりに$stmt->free_result()
を呼び出してから別のステートメントを実行します。
PHPは接続を終了し、実行が終了するとリソースを解放します。
mysqli :: closeプリペアドステートメントを閉じます。
使用可能な接続の総数は限られているため、リソースを解放してから2番目にリソースを解放することをお勧めします。
そして
mysqli_stmt :: free_result指定されたステートメントハンドルの保存された結果メモリを解放します。
リソースが不要になったときに、リソースを明示的に解放することをお勧めします。同時に多くのリクエストが行われる場合、サーバーに大きな負荷がかかるのを防ぐことができます。
両方を呼び出す必要はありません。両方を使用することをお勧めします。