【发布时间】:2016-04-15 23:15:12
【问题描述】:
我有一个应用程序,它有很多在多个地方重复使用的查询。存储这些最有效的方法是什么?我的直觉是将它们存储在一个类的数组中,即:
$sql['report 1'] = "SELECT this FROM that WHERE expression";
$sql['report 2'] = "SELECT this FROM that WHERE expression2";
等等
另一位参与此项目的开发人员使用 switch case 完成了这项工作:
switch($query){
case 'report 1':
$sql = "SELECT this FROM that WHERE expression1";
break;
case 'report 2':
$sql = "SELECT this FROM that WHERE expression2";
break;
}
$result = runquery($sql);
我的另一个想法是每个报告都应该是一个独立的函数:
function report1(){
// run the query here
return result;
}
function report2(){
// run the query here
return $result;
}
我更喜欢数组方法,因为它看起来代码更简洁,但是由于查询量很大,这在内存使用方面是不是很浪费?不是所有查询最终都存储在内存中吗?
switch case 方法似乎有点笨拙。这些方法的优缺点是什么?有没有一种方法可以突出“最好的方法”来做到这一点?或者也许是我没有考虑过的另一种方法?
【问题讨论】:
-
不要“存储” SQL 查询。在一个地方定义它们并调用该函数。
-
老实说,我也有很多查询可以运行,但我不会将它们保存在任何地方。我正在用 querybuilder 类编写它们。例如。
$sql = querybuilder::newInstance()->table('settings')->select("*"); //returns the PDOStatement object。这似乎是在浪费磁盘空间,但是如果您想从该表中获取更多指定或不同的数据,您现在会添加另一个函数吗?我只会在上面的列表中添加更多方法(或者其他开发人员只会扩展 sql 字符串)。老实说,我看不到使用数组、开关或函数只返回 sql 数据的优点。 -
我同意@juergen。最好的方法是创建一个存储库类,其中包含如下方法:
public function getReport1(),其中包含 SQL 查询并获取结果。然后很容易将存储库类与依赖注入等交换以测试/更改存储。
标签: php mysql function switch-statement memory-efficient