PHP / MySql连接开销

时间:2013-07-13 14:40:23

标签: php mysql database

我最近为PHP应用程序完成了一个数据层。在我的数据层中,我有各种方法来执行不同的sql任务,例如选择,插入,删除等。来自.NET背景,我练习打开连接,对连接做任何事情,然后关闭它们。

在最近的一次代码审查中,我被问及这种做法,一位同事表示最好在应用程序的生命周期中保持连接状态。他们的理由是打开/关闭连接非常耗时。我的论点是让它们保持开放是资源消耗。以下是来自执行选择查询的数据层的代码示例。我是一个相当新的PHP,所以我真的没有回应批评。任何人都可以对此提供任何见解吗?

    public static final function executeSelectQuery($qry){
        $connection = mysql_connect(ADS_DB_HOST, ADS_DB_USERNAME, ADS_DB_PASSWORD) or die(ADS_ERROR_MSG . mysql_error());
        $db = mysql_select_db(ADS_DB_NAME) or die(ADS_ERROR_MSG . mysql_error());
        $result = mysql_query($qry) or die(ADS_ERROR_MSG . mysql_error());
        mysql_close();

        $results = array();
        while($rows = mysql_fetch_assoc(($result))){
            $results[] = $rows;
        }
        return sprintf('{"results":{"rows":%s}}', json_encode($results));
    }

2 个答案:

答案 0 :(得分:0)

你的同事是对的,这段代码是错误的 问自己一个问题,某些资源会消耗打开的连接。

要添加到代码审核中,您对错误处理的想法是错误的。永远不要使用die来处理错误,而是抛出异常。

另外,不要手动制作JSON。

return json_encode(array("results" => array ("rows" => $results)));

另外,考虑修改此功能以使其接受参数化查询的值

答案 1 :(得分:0)

速度与内存使用权衡的经典案例。这个问题没有一个答案适合所有人;它归结为两者中哪一个对你正在进行的特定项目最重要。

编辑:阅读新评论后,我看到这个项目针对的是移动设备。在这种情况下,我会说,由于移动设备的内存有限(与现在大多数台式机可用的船载相反),优先考虑内存使用将是正确的呼叫,因为每个人都希望移动设备与台式机相比相当慢。