我最近完成了一个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)));
此外,请考虑修改此函数,使其接受参数化查询的值