我在$ _GET变量上使用switch语句来生成我想要的页面结果。
我一直在质疑在这种情况下运行查询的最佳方式,因为我根本不知道最佳实践或方法。所以我在下面有一些伪代码,我想知道最好的方法是什么。
这可能是一种在性能方面无关紧要的情况,但如果确实如此,我想确保我做得对。
if(isset($_GET['type'])){
$var = $_GET['type'];
//run the query now and select everything needed from the DB for either switch case.
//view implications that involve pulled data
switch($var){
case '1':
//Or do I run the query here, getting only what I need for this situation
//view implications that involve pulled data
break;
case '2':
//again run the query here, getting only what I need for this situation
//view implications that involve pulled data
break;
}
}
两种情况都共享来自数据库的一两个相似数据,但每种情况的大部分内容仅在这种情况下才需要。
尝试尽力而为,保持代码尽可能干净,高效。
谢谢!
答案 0 :(得分:4)
当然,最好只查询与您相关的数据。捆绑数据库,通过网络传输更多数据,然后在PHP中做更多工作来过滤掉那些你不感兴趣的数据是没有意义的。所以你肯定不应该查询“一切”。
另一方面,也许switch
也没有理由。必须有一种重写查询的方法,以便您可以将变量的值注入其中,并且根据该值,它将返回您想要的数据。这当然也取决于您的数据库架构。
无论您决定做什么,请注意不要让自己暴露于SQL injection。
答案 1 :(得分:3)
如果没有从数据库中获取数据的确切内容,很难说清楚,但有时我使用if ... then或switch构建一个sql语句,然后执行完成的查询。
$sql = 'SELECT * FROM myTable WHERE ';
switch($_GET['type']){
case 1:
$sql += 'somefield="' . mysql_real_escape_string($_GET['param1']) . '"';
break;
default:
break;
}
答案 2 :(得分:1)
当然,在switch语句中查询比在它之前查询要好。
它将减少用于存储查询结果的内存,并且可能执行的代码更少(例如,如果您正在迭代查询结果)。