目前,我正在我的应用初始化中打开数据库连接。这是一个相当小的应用程序,PHP,如果这是相关的。
我应该连接数据库,进行调用,然后为我编写的每个数据库函数关闭并重复此过程吗?
例如,我有以下函数从我的应用程序初始化中获取$ db变量。
function get_all_sections()
{
global $db;
$sql = 'select * from sections';
if (!$db->executeSQL($sql, $result))
{
throw new Exception($db->getDatabaseError());
exit();
}
$sections = array();
for ($i = 0; $i < $db->numberOfRows($result); $i++)
{
$sections[] = new Section($db->fetchArray($result, MYSQLI_ASSOC));
}
return $sections;
}
如果我打开连接然后在获取行后关闭它会更好吗?这似乎是很多打开和关闭的连接。
答案 0 :(得分:5)
如果您在(http://en.wikipedia.org/wiki/Connection_pool)上有连接池,则可以在需要时抓取新连接。但是,我会说习惯将任何资源视为“有限”,如果你打开数据库句柄,请尽可能长时间保持它。
答案 1 :(得分:3)
连接数据库需要花费有限的时间。通过域套接字或命名管道进行连接时,它可以忽略不计,但如果通过网络连接,或者更糟糕的是开放式Internet,它可能会大得多。至少在请求期限内保持连接状态。
答案 2 :(得分:3)
使用mysql_pconnect进行连接池,并在每个操作结束时关闭。线程不会真正关闭,线程将被重用。这样既安全又有效。
答案 3 :(得分:2)
由于PHP MySQL连接相当轻,因此您可以在需要时打开和关闭连接。其他数据库连接也是如此,例如连接到SQL Server,它具有相当重的连接。
但是,在所有情况下,在可维护性/逻辑/依赖性方面做任何最有意义的事情。然后,如果您发现自己感觉速度可以放缓,那么您可以优化那些需要提速的区域。
如有疑问,请遵循黄金法则:不要过早优化。
答案 4 :(得分:1)
最简单的解决方案是使用mysql_pconnect() - see here
这种方式如果连接已经打开,它将使用它而不是创建一个新连接。如果不是它将再次连接