【问题标题】:What is a better method to use to output mysql(PDO) results to HTML table将mysql(PDO)结果输出到HTML表的更好方法是什么
【发布时间】:2016-04-01 04:23:46
【问题描述】:

大约 3 周前开始学习 PHP,现在正在处理数据库连接和查询。我的问题涉及一章编程教学点。尽管我无法测试我的代码,但我在此站点上所做的研究使我使用 while 循环编写了以下一般查询。然而,这本书解释并教授了一些不同的东西。是一种方法比另一种更好还是两者都实现了相同的目标,即从数据库中提取数据并输出到 HTML 表?

另外,我相信我在这里学到的东西比任何书都多。意见和教导很有价值。

这就是我所拥有的:

<?php
        /set connection parameter variables
$hostname = 'localhost';
$username = 'richardweb';
$password = 'richardchocolate';
$dbname = 'richard_ricardo_assignment_db';

$conn = new PDO("mysql:dbname=$dbname;host=$hostname", $username, $password);

//set mysql query

$sql = 'SELECT studentID, name, email 
        FROM student
        ORDER BY studentID';

$qry = $conn->query($sql);

$qry->setFetchMode(PDO::FETCH_ASSOC);
    try {
        $conn = new PDO("mysql:dbname=$dbname;host=$hostname"; $username, $password);

        $sql = 'SELECT studentID, name, email 
                FROM student
                ORDER BY studentID';
        $qry = $conn->query($sql);
        $qry->setFetchMode(PDO::FETCH_ASSOC);
    }

    catch (PDOException $e) {
         echo "Error connecting to the database" . $e->getMessage();
    }
    ?>

    <!doctype html>
    <html>
    <head>
    <title>Whatever</title>
    <link rel="stylesheet" type="text/css" href="main.css">
    </head>
    <body>

    <div class="main">

    <h1>Students</h1>
    <table class="table1">
    <thead>
    <tr>
    <th>Student ID</th>
    <th>Name</th>
    <th>Email</th>
    </tr>
    </thead>
    <tbody>
    <?php while ($row = $qry->fetchALL(); ?>
    <tr>
    <td><?php echo htmlspecialchars($r['studentID'])?></td>
    <td><?php echo htmlspecialchars($r['name'])?></td>
    <td><?php echo htmlspecialchars($r['email'])?></td>
    </tr>
    <?php endwhile; ?>
    </tbody>
    </table>
    </div>
    </body>
    </html>

This is what my book covers for displaying results in HTML Table. Only showing the tabular data output. I'm only giving the example from the book and have not converted my code. 

<?php foreach ($products as $product) : ?>
<tr>
    <td><?php echo $product['productCode']; ?></td>
    <td><?php echo $product['productName']; ?></td>
    <td><?php echo $product['listPrice']; ?></td>
</tr>
<?php endforeach; ?>

【问题讨论】:

  • 我不能 100% 确定您在问什么,但 while ($row = $qry-&gt;fetchALL(); 不是一个好主意。 fetchAll() 实际上是获取所有信息。所以这个循环只会执行一次,$row 实际上会有很多行。
  • 我在这里找到的许多示例和问题都使用了我原始问题中的第一种方法。我只是想知道首选的逻辑方法。
  • 你确定吗?我敢肯定他们中的许多人确实使用while ($row = $qry-&gt;fetch())...,但我真的不认为你会找到很多使用while ($row = $qry-&gt;fetchAll())...

标签: php mysql html pdo


【解决方案1】:

如果您已成功执行 PDO 语句,则有两种主要方法可以获取结果。

  1. 一次一个 - 这通常在 while 循环中完成,使用 PDOStatement 的一种方法从结果集中的 ONE 行中获取数据,例如 fetch()fetchColumn() 或 @987654324 @,像这样:

    while ($row = $stmt->fetch()) {
       // do something with data from each row
    }
    
  2. 一下子。为此,您将使用fetchAll(),然后通常使用foreach 循环来遍历行数组。

    $rows = $stmt->fetchAll();
    foreach ($rows as $row) {
        // do something with data from each row
    }
    

两者本质上都不比另一种更好。您应该选择哪一个取决于您需要对数据做什么。对于像简单地创建一个 HTML 表格来显示结果这样的事情,使用“一次一个”的方法就足够了。

fetchAll() 的一个合理用途是,如果您需要在程序的不同点对结果执行多项不同的操作。如果您使用“一次一个”的方法,则需要重复执行查询,这通常效率较低。

但是在使用 fetchAll 时,一定要注意这个警告(来自 PHP 文档):

使用此方法获取大型结果集将导致对系统和可能的网络资源的大量需求。与其检索所有数据并在 PHP 中进行操作,不如考虑使用数据库服务器来操作结果集。例如,在使用 PHP 检索和处理结果之前,使用 SQL 中的 WHERE 和 ORDER BY 子句来限制结果。

【讨论】:

  • 优秀的分数,非常感谢。我觉得奇怪的是书籍资源引导我只使用一种方法。尽管它涵盖了 fetch() 和 fetchAll() ,但没有像您提供的那样解释为什么使用一个而不是另一个。
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 2021-08-18
  • 2014-05-03
  • 1970-01-01
相关资源
最近更新 更多