PHP/MySql连接开销

PHP/MySql连接开销,php,mysql,database,Php,Mysql,Database,我最近完成了一个PHP应用程序的数据层。在我的数据层中,我有各种方法来执行不同的sql任务,如选择、插入、删除等。从.NET背景中,我练习打开连接,对连接执行任何操作,然后关闭它们 在最近的一次代码审查中,有人向我询问了这种做法,一位同事说最好在应用程序的生命周期中保持连接的开放状态。他们的理由是打开/关闭连接非常耗时。我的论点是,让它们保持开放状态会消耗资源。下面是数据层中执行select查询的代码示例。我对PHP相当陌生,所以我对这一批评并没有真正的回应。有人能对此提供一些见解吗 p

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

在最近的一次代码审查中,有人向我询问了这种做法,一位同事说最好在应用程序的生命周期中保持连接的开放状态。他们的理由是打开/关闭连接非常耗时。我的论点是,让它们保持开放状态会消耗资源。下面是数据层中执行select查询的代码示例。我对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)));

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

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


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

从两个方面对其进行基准测试。但是,是的,重新建立一个连接通常比让一个连接再打开几毫秒要昂贵得多。事实上,我应该更清楚。此数据层将用于为移动设备提供数据的web服务。数据层不用于web应用程序中。不确定这是否会造成差异这些设备不使用HTTP吗?如果您创建新代码,您应该使用PDO或mysqli,而不是不推荐的mysql接口-。这不能用一般方式回答。你根本不知道。它是套接字的描述符,但在服务器端可能有大量内存来维护客户端状态/信息。相反,对于PHP来说,这是完全可能的。谢谢,尽管这并没有解决最初的问题,但这是很好的信息。正如我在最初的问题中所说的,我是PHP新手。