PHP/MySql连接开销


PHP/MySql Connection Overhead

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

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

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

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

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

此外,不要手动创建JSON。

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

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