0

我最近完成了一个 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));
    }
4

2 回答 2

0

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

为了增加代码审查,您对错误处理的想法是错误的。永远不要使用 die 来处理错误,而是抛出异常。

此外,不要手动制作 JSON。

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

此外,请考虑修改此函数以使其接受参数化查询的值

于 2013-07-13T14:44:05.013 回答
0

速度与内存使用权衡的经典案例。这个问题没有万能的答案。归根结底,这两者中的哪一个对您正在进行的特定项目最重要。

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

于 2013-07-13T14:49:41.327 回答