从Mysql查询创建表的正确方法是什么?

时间:2014-02-20 05:36:52

标签: php mysql html-table

我的问题是,我知道有很多不同的方法可以做同样的事情,但我怀疑从查询中构建表格有一个“标准”。

查看2个查询/表组合,哪一个更容易接受? 是否有更标准化的版本从查询构建表? 我想知道这样做的“最佳实践”方式。

我不久前创建了一个查询:

$query1="select concat(sp.first_name,' ',sp.last_name)as 'Player Name',st.name as 'Team', spt_league_id as 'League', ss.Season_name
from stats_player sp
inner join stats_player_team stp,stats_team st, stats_season ss
where stp.player_num = sp.player_num  and st.team_num=stp.team_id and ss.season_index=stp.season_id and stp.season_id=$this_season
order by st.League_id,st.Team_num,sp.player_num";


$result=mysql_query($query1);
$num=mysql_numrows($result);

mysql_close();

然后用这个构建表:

?>
<table border="1" cellspacing="2" cellpadding="2">
<tr>
  <td><font face="Arial, Helvetica, sans-serif"><b>Player</b></font></td>
  <td><font face="Arial, Helvetica, sans-serif"><b>Team</b></font></td>
  <td><font face="Arial, Helvetica, sans-serif"><b>League</b></font></td>
</tr>

<?php

$i=0;
while ($i < $num) {
    $f1=mysql_result($result,$i,"Player Name");
    $f2=mysql_result($result,$i,"Team");
    $f3=mysql_result($result,$i,"League");
?>
<tr>
  <td><font face="Arial, Helvetica, sans-serif"><?php echo $f1; ?></font></td>
  <td><font face="Arial, Helvetica, sans-serif"><?php echo $f2; ?></font></td>
  <td><font face="Arial, Helvetica, sans-serif"><?php echo $f3; ?></font></td>
</tr>

<?php
$i++;
}
?>

然后我遇到了别人写的代码:

$query= "select first_name,last_name,email_address,name,captain_id,paid,p.player_num,league_id from stats_player p left join  stats_player_team t on p.player_num=t.player_num left join  stats_team s on t.team_id=s.team_num where season_id=$this_season and name is not NULL order by league_id,s.captain_id,name,first_name";
$results=mysql_query($query);
print "<table border=1>";
print "<tr><td>First Name</td><td>Last Name</td><td>captain</td><td>Email?</td><td>League</td><td>Team</td><td>pay</td><td>wks played</td></tr>";
while ($row=mysql_fetch_assoc($results)){
    if($row['email_address'] != NULL ){
    $email='y';
    }
    else {
    $email='n';
    }
if($row[captain_id]==$row[player_num]){ $iscapt="Captain"; }
else{$iscapt="";}
  $paid=$row[paid];
  if($paid){$playpaid="<td bgcolor=#99ff33>paid</td>";}
  else {$playpaid="<td bgcolor=#ff6633>not paid</td>";}

printf ("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></td><td>%s</td>%s \n</tr>",$row['first_name'],$row['last_name'],$iscapt,$email,$row['league_id'],$row['name'],$playpaid);

}
print "</table>";

2 个答案:

答案 0 :(得分:1)

除非你没有选择,否则总是尝试分离来自PHP代码的HTML代码。它看起来很笨拙,将来很难处理。此外,加载页面还需要更多时间。

您的第一个代码更可取。

答案 1 :(得分:0)

如果输出相同且性能相同,则更易读的代码“更好”。

但是,第一个不输出有效的HTML5或XHTML,因为它使用了应该通过CSS完成的弃用属性。除了全局属性,border是表元素的唯一有效属性;虽然边框应该使用CSS完成。第一个WHILE循环应该用FOR循环完成。

所有块中的PHP都使用折旧的mysql_query,因此它们确实不合适。

所有块中的SQL显然容易受到SQL注入的攻击;你应该使用预准备语句,参数化查询,或者至少使用mysql_real_escape_string。