PDOで準備されたステートメントは、使用後に解放する必要がありますか?もしそうなら、どのように?DEALLOCATE PREPARE
具体的には、MySQLについて質問しています。PDOを介してどのように電話をかけることができますか。(編集:明確にするために、この質問はエミュレートされた準備ではなく、実際の準備を指します。)
また、これにより結果セットが解放されますか(大きい場合)?
説明:
私はの行に沿ってコードを見てきました
$stmnt = $db->prepare($sql);
$stmnt->execute($aParams);
$stmnt = null;
これは、これが何をするのか、いつ、そしてfunset($stmnt);
が異なるのかどうか疑問に思いましたか?
マニュアルはそれを示しています
クエリが準備されると、データベースはクエリを実行するための計画を分析、コンパイル、および最適化します。[...]プリペアドステートメントを使用することにより、アプリケーションは分析/コンパイル/最適化のサイクルを繰り返さないようにします。
これは、ステートメントの割り当てを解除する必要があることを示唆する傾向があり、MySQLには機能があります。それで、
- 電話できます
DEALLOCATE PREPARE
か、そしてどのように - あなたはそれをすべきですか?
- そして、ステートメントをnullに設定する(またはステートメントを設定解除する)と、mysql_およびmysqli_の「free_result」と同じようになることを誰かが確認できますか?
- それはすぐに起こりますか、それともガベージコレクターが起動するのを待ちますか?
完全を期すために、の「free_result」および「close」関数を参照する別のSO質問mysqli_()
は、ステートメントを解放すると実際に時間が追加されることを示唆しています(メモリ使用量が多く、スペースが必要な場合を除く)。ただし、「free_result」は、SQLサーバーを解放して準備されたステートメントをキャッシュすることとは異なります。