Mysqli检索数据并显示它们 - 最好的方法

时间:2015-07-30 07:51:29

标签: php mysqli logic presentation fetchall

以下哪个选项更好

选项1:

//control file:  
$smpt = $con->query("SELECT id,name FROM customers");
//fetch all resuts 
$results = array();
while ($row = $result->fetch_assoc()) {
  $results[] = $row;
}    
$smpt->close();
//Note: PHP version < 5.3.0 so I can't use just $results->fetch_all('MYSQLI_ASSOC');
//view file:
foreach($results as $key=>$value) {
//display results
}
unset($results);

选项2:

//control file:  
$smpt = $con->query("SELECT id,name FROM customers");
//fetch all resluts 
//view file:
while($row = $result->fetch_assoc()) {
//display results
}
$smpt->close();

我试图将逻辑与表示完全分开...当前我正在使用选项2因为选项1脚本经历了2个循环。一个用于获取数据,另一个用于显示数据。但哪一个更好用?

由于

2 个答案:

答案 0 :(得分:0)

视图总是最好只处理演示问题。

因此,在您提到的两个选项之间,我会选择选项1,因此您不必在视图中关闭$ smpt($ smpt与表示层无关)。

答案 1 :(得分:0)

选项1 允许您重复使用$data变量,以便您可以显示两次结果,但这样做的代价是您可能会存储大量数据一个变量。一旦您100%确定已完成它,您可以使用unset($data)清除此内容。

选项2 需要更少的循环(只有一个而不是两个),并且不需要额外的变量来存储数据。这样做的代价是while循环只能使用一次。

在宏观方案中,速度的差异将极小,用户不会注意到它们,但是如果在一次脚本中有20多个这样的实例,那么它可能会产生明显的影响。

我建议选项2 ,前提是您只需要使用while循环一次。此外,您可以benchmark your scripts查看他们彼此之间的表现。