我下面的代码正在运行,但我想知道如何尽可能动态地传递选择中的列。如果我想扩展代码以在页面上包含三个或四个查询,理想情况下我只想复制前三行代码和调用该函数的最后一行。
例如,如果我有另一个查询从不同的表调用六列,我只想通过函数参数将列传递给 foreach 结果,而不是在命名每列时使用 printf。
我认为这样可以更轻松地复制代码,但我很难弄清楚这一点。
还想知道我是否可以使用列表/每个,就像我对结果上的标题所做的那样。
$showTeamInfoTitles = array("Team Id","Team Name","Captain");
$showTeamInfo = " SELECT teamid, teamname, captain FROM teams WHERE teamid= ?";
$whichteam=5;
function displayresults($query,$columntitles,$whichteam) {
$dbh = database_connect();
$sth = $dbh->prepare($query);
$sth->bindValue(1, $whichteam, PDO::PARAM_STR);
$sth->execute();
$result = $sth->fetchAll();
echo "<table border='1'>";
echo "<tr>";
while (list($key, $value) = each($columntitles)) {
echo "<th>" . $value . "</th>";
}
echo "</tr>";
如何嵌套它,这样我就不必调用 $value['captain'] 例如
foreach ($result as $key => $value) {
printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>", $value['teamid'], $value['teamname'], $value['captain'] );
};
echo "</table>";
}
// close the database connection
$dbh = null;
displayresults($showTeamInfo,$showTeamInfoTitles,$whichteam);
另一个查询可能会获取该团队的日程安排并将其显示在同一页面上:
SELECT hometeam, awayteam, gamedate, arena FROM schedule WHERE hometeam = ? OR awayteam = ?
因此,在 printf 中,我每次都必须对每一列进行硬编码。
最佳答案
有两个错误的前提导致您提出这个问题:
- 您将在从数据库获取查询结果的同一函数中显示查询结果。多年来,这种做法已经被认为是 Not Acceptable 。您应该使用模板进行输出。
- 您的印象是您的所有查询都像简单的查找一样愚蠢。实际上,SQL 的功能要强大得多,实际的查询也会复杂得多。
因此,您必须使用两个函数 fetchanddisplayresults()
,而不是单个函数:fetchresults()
和 displayresults()
。虽然后一个可以按照您想要的方式确定,但前一个必须更加灵活,允许任何 SQL 运行。
此外,您还必须确保 database_connect()
不会在每次调用时都连接到数据库。
所以它会是这样的代码。对于查询运行函数,我建议使用 PDO wrapper of mine .
$teamTitles = array("Team Id","Team Name","Captain");
$whichteam = 5;
$sql = "SELECT teamid, teamname, captain FROM teams WHERE teamid= ?";
$teamData = DB::run($sql,[$whichteam])->fetchAll();
displayTable($teamTitles, $teamData);
function displayTable($titles, $data) {
?>
<table border='1'>
<tr>
<?php foreach($titles as $value)): ?>
<th><?=$value?></th>
<?php endforeach ?>
</tr>
<?php foreach($data as $row)): ?>
<tr>
<?php foreach($row as $value)): ?>
<td><?=$value?></td>
<?php endforeach ?>
</tr>
<?php endforeach ?>
</table>
<?
}
关于php - 需要帮助嵌套代码以便于复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35448776/