2011-10-26 6 views
3

私はDreamweaverを使用してPHPとMySQLベースのWebサイトを開発してきましたが、単純なことをやりすぎる傾向があるため、通常は自分のクエリとPHPを使用して結果を処理します。PHP mysql_close()とmysql_free_result() - どの時点で使用するべきですか?

より複雑なページを行った後、私は

永続的な接続がないが使用されているループなどで多分より最大5 SELECTsとなど、多くのUPDATEsを持つことができる、と私は一度だけデータベースに接続しますスクリプトごとに。私が知りたいのは何

は、私は一度だけのMySQLに接続することを考えると、あり、クエリの量/複雑さは、MySQLの接続にに関してあまり影響を与えない、と私は今まで明示的に私のスクリプトでmysql_close()を呼び出す必要がん?

またどの時点で私はmysql_free_result()を使用して起動する必要があり

私は心配ですものの種類の擬似例(または私はとにかくそれを使用すべきですか?):

connect to database; 

aSelect; 

do { 
    anUpdate; 
} while(select has rows); 

anotherSelect; 

anotherSelect; 

anUpdate; 

do { 
    aSelect; 
    anUpdate; 
} while (anotherSelect has rows); 

anotherUpdate; 

aVeryBigSelect; 

//end of file 
//no mysql_free_result() or mysql_close() calls, should there be? 
+2

mysql_close()を実行する唯一の時間は、長期実行スクリプトを使用していて、データベースがメインの長期ループ中に必要ない場合です。それ以外の場合は、スクリプトが終了して接続が閉じられると、PHPによってクリーンアップされます。 –

+0

これはケースのようです - ありがとう。私はまだPHPに慣れていて、Java開発から脱退しています。このようなことが起こったとき、私は一貫して驚いていて疑いがあります.JAはあなたのために大丈夫です.D – jammypeach

答えて

3

の場合PHPがウェブページの実行終了時に自動的にメモリを解放してくれるので、ウェブページを配信するような短期間でスクリプトが実行されている場合は、mysql_closemysql_free_resultに電話をかけないでください。

一方、長時間実行するバッチスクリプトを作成して何千ものクエリを実行する場合は、mysql_free_resultを呼び出すことをお勧めします。

0

あなたはmysql_close()を自分で呼び出す必要はなく、スクリプトの終了時に接続が閉じられます。

クエリで大きな結果セットが返され、メモリ不足が発生した場合は、mysql_free_result()を呼び出すことができます。しかし、実際に問題に遭遇した場合は、経験則として、これだけにしてください。

+2

_実際に問題にぶつかる_それは誰のルールですか? –

+0

それは私のルールです。 –

+0

はそれを呼び出すためのオーバーヘッドがあります。つまり、すべてのスクリプトの最後にmysql_close()を呼び出した場合、これが問題になりますか? – jammypeach

-1

データベース接続が不要になったら、データベース接続を終了することが重要です。あなたはもう、クエリの結果を必要としない、あなたはメモリが不足していると(セキュリティ)

、あなたはこれ、たとえば、クエリの結果をループした後に行うことができる。mysql_free_result();
を呼び出す必要があります

+0

あなたの「セキュリティ」発言を説明するのに気をつけますか? –

+0

は大佐に同意します。スクリプトの実行中にDB接続を開いたままにしておくと、セキュリティ上の影響はありますか? – jammypeach

+0

スクリプトの実行直後にデータベース接続が閉じられていないことを一度読んだことがあります。 (タイムアウトによって) - ハッカーがデータベースにアクセスする可能性があります。それについては確かではありません。 –

関連する問題