php - 需要帮助嵌套代码以便于复制

标签 php mysql pdo

我下面的代码正在运行,但我想知道如何尽可能动态地传递选择中的列。如果我想扩展代码以在页面上包含三个或四个查询,理想情况下我只想复制前三行代码和调用该函数的最后一行。

例如,如果我有另一个查询从不同的表调用六列,我只想通过函数参数将列传递给 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 中,我每次都必须对每一列进行硬编码。

最佳答案

有两个错误的前提导致您提出这个问题:

  1. 您将在从数据库获取查询结果的同一函数中显示查询结果。多年来,这种做法已经被认为是 Not Acceptable 。您应该使用模板进行输出。
  2. 您的印象是您的所有查询都像简单的查找一样愚蠢。实际上,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/

相关文章:

MySQL 查询对表进行联接,其中第二个表名称来自第一个表中的列

sql - 使用 Postgresql 更新

php - 为什么我无法使用 codeigniter 连接到 postgresql?

php - 使用ajax codeigniter检查用户名和密码是否匹配

PHP PDO - 检索更改的产品

php - TSP(旅行商问题)求解器使用 GoogleMap

PHP 在 HTML 表格中显示数组

php - curl:在重定向时保留 cookie

php - 从$_SESSION获取用户名

php - PDO 更新查询绝对不执行任何操作