PHP mysql_close()和mysql_free_result() - 我应该在什么时候使用它们?

问题描述:

我一直在使用Dreamweaver开发PHP和MySQL为基础的网站,但因为它往往过分简单的事情,我通常写我自己的查询和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开发中脱颖而出我总是感到惊讶和/或当这样的事情发生时会产生怀疑 - Java不会为你清理一些东西,一般来说:D – jammypeach

如果脚本运行的时间非常短,就像传递一个网页一样,不要致电mysql_closemysql_free_result,因为PHP将关闭连接并在网页执行结束时自动释放内存。

在另一方面,如果你写一个长期运行的批处理脚本,做成千上万的查询,它可能是一个好主意,打电话mysql_free_result

您不必调用mysql_close()自己,当脚本完成连接被关闭。

你可以调用mysql_free_result()如果您的查询返回一个大的结果集,这将导致你耗尽内存。但作为一个经验法则,如果你真的遇到问题,只有这样。

+2

_仅限于此,如果你实际上遇到问题_这是谁的规则? –

+0

这是我自己的规则。 –

+0

是否有调用它的任何开销 - 即,如果在所有脚本的末尾调用mysql_close()作为经验法则,是否会造成任何危害? – jammypeach

它关闭时,你不需要它了数据库连接是非常重要的。 (安全)

一旦你并不需要一个查询的结果了,你的记忆是低,你应该叫mysql_free_result();
这可能,例如,可以通过一个查询结果的循环后进行。

+0

谨慎解释你的“安全”言论? –

+0

与上校保持一致,在脚本执行过程中是否有数据库连接断开的安全隐患? – jammypeach

+0

我曾经读过脚本执行后数据库连接没有立即关闭。 (通过超时) - 所以黑客可能会访问数据库。虽然不确定。 –