在switch语句中查询db


PHP query db in switch statement

我在$_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;

   }
}

这两种情况都共享来自DB的一个或两个类似的数据块,但每种情况的大部分内容仅在这种情况下才需要。

底线是尽力做到最好,保持代码尽可能的干净和高效。

谢谢!

当然,最好只查询与您相关的数据。占用数据库,通过网络传输更多的数据,然后用PHP做更多的工作来过滤掉您不感兴趣的数据是没有意义的。所以你当然不应该查询"everything"

另一方面,可能也没有理由去switch。必须有一种重写查询的方法,以便您可以将变量的值注入其中,并且根据该值,它将在任何情况下返回您想要的数据。这当然也取决于你的数据库模式。

如果没有看到您想要的数据库数据,很难判断,但有时我使用if构建sql语句…然后切换,然后执行完成的查询。

$sql = 'SELECT * FROM myTable WHERE ';
switch($_GET['type']){
  case 1:
    $sql += 'somefield="' . mysql_real_escape_string($_GET['param1']) . '"';
  break;
  default:
  break; 
}

当然,在switch语句内查询比在switch语句前查询要好。

它将导致用于存储查询结果的内存更少,并且可能执行更少的代码(例如,如果您正在迭代查询结果)。