PDO 在表格中显示结果

Posted

技术标签:

【中文标题】PDO 在表格中显示结果【英文标题】:PDO display results in table 【发布时间】:2021-08-14 18:55:54 【问题描述】:

我正在尝试将准备好的语句的结果显示到表格中。

这是查询和尝试的表:

<?php
  $s = "SELECT username,fullname,email,userlevel FROM users";
  $sth = $dbc->prepare($s, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  $sth->execute();

  echo "<div><table class="demoTable">";
  echo "<thead><tr>" .
       "<th>Username</th>" .
       "<th>Fullname</th>" .
       "<th>Email</th>" .
       "<th>Userlevel</th>" .
       "</tr></thead>";
  echo "<tbody>";
  
  while($Row = $sth->fetchAll(PDO::FETCH_ASSOC)) 
    echo "<tr><td>".$Row['username']."</td>";
    echo "<td>".$Row['fullname']."</td>";
    echo "<td>".$Row['email']."</td>";
    echo "<td>".$Row['userlevel']."</td>";
    echo "</tr></tbody>";
  
  echo "</table></div>";
?>

使用上述内容,我没有在屏幕上显示任何内容。

当我使用以下内容时:

print_r($Row);

我可以在数组中看到如下所示的结果:

Array ( 
[0] => Array ( [username] => usr.sname [fullname] => Some Name [email] => some.name@company.com [userlevel] => 9 ) 
[1] => Array ( [username] => usr.aname [fullname] => Another Name [email] => another.name@company.com  [userlevel] => 1 ) 
[2] => Array ( [username] => usr.fname [fullname] => Final Name [email] => final.name@company.com [userlevel] => 1 ) // a few more

所以,查询工作正常。我就是无法让数据显示在表格中。

我怎样才能做到这一点?

【问题讨论】:

可能是... while($Row = $sth-&gt;fetch(PDO::FETCH_ASSOC)) ...(不是fetchAll。如果你想使用fetchAll(),你需要一个额外的for循环。 顾名思义,fetchAll 一次获取所有数据。你的代码应该给你未定义的索引通知。而你的print_r 揭示了结构。或者,您甚至可以直接foreach 执行的语句。 【参考方案1】:

FWIW,以下对我来说很好......

<?php
  /*
  DROP TABLE users;
  
  CREATE TABLE users(user_id SERIAL PRIMARY KEY
  ,username VARCHAR(12) UNIQUE
  ,fullname VARCHAR(20) NOT NULL
  ,email VARCHAR(20) NOT NULL
  ,userlevel INT NOT NULL);
  
  INSERT INTO users VALUES 
  (1,'John','John Lennon','john@apple.corp',1),
  (2,'Paul','Paul McCartney','paul@apple.corp',1),
  (3,'George','George Harrison','george@apple.corp',2),
  (4,'Ringo','Ringo Starr','ringo@apple.corp',3);
  */
  
  require('path/to/connection/stateme.nts');
  $query = "SELECT username,fullname,email,userlevel FROM users";
  $data = $pdo->query($query)->fetchAll(PDO::FETCH_BOTH);
   // my connection is something like '$pdo = new PDO($dsn, $user, $pass, $options);'

  echo "
  <div><table class=\"demoTable\">
   <thead>
    <tr>
     <th>Username</th>
     <th>Fullname</th>
     <th>Email</th>
     <th>Userlevel</th>
    </tr>
   </thead>
   <tbody>
  ";

foreach($data as $row)
echo "
<tr>
 <td>$row['username']</td>
 <td>$row['fullname']</td>
 <td>$row['email']</td>
 <td>$row['userlevel']</td>
</tr>
";

  echo "</tbody></table></div>";
?>

输出:

Username Fullname        Email            Userlevel
John     John Lennon     john@apple.corp    1
Paul     Paul McCartney  paul@apple.corp    1
George   George Harrison george@apple.corp  2
Ringo    Ringo Starr     ringo@apple.corp   3

【讨论】:

使用 fetchAll(PDO::FETCH_BOTH) 似乎已经成功了。谢谢。【参考方案2】:

我认为问题在于您使用的是 fetchAll,它返回查询的所有行而不是一行一行。所以用这段代码替换你的while循环,我认为它应该可以工作。

   <?php
   $s = "SELECT username,fullname,email,userlevel FROM users";
   $sth = $dbc->prepare($s, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
   $sth->execute();

   echo "<div><table class='demoTable'>";
   echo "<thead><tr>" .
   "<th>Username</th>" .
   "<th>Fullname</th>" .
   "<th>Email</th>" .
   "<th>Userlevel</th>" .
   "</tr></thead>";
    echo "<tbody>";

    $allRows = $sth->fetchAll();
    foreach($allRows as $Row) 
        echo "<tr><td>".$Row['username']."</td>";
        echo "<td>".$Row['fullname']."</td>";
        echo "<td>".$Row['email']."</td>";
        echo "<td>".$Row['userlevel']."</td>";
        echo "</tr>";
    
    echo "</tbody></table></div>";
    ?>

【讨论】:

我没有在屏幕上恢复任何内容。我就是不明白。 我刚刚注意到循环中有 标记。我编辑了我的答案并将其放在最后一个回声中。我认为这可能会阻止表格正确显示 我进行了更新,但屏幕上仍然没有任何内容。我将把表头移到 PHP 之外。 我尝试重新创建您的代码,但它没有运行,因为表标签中的类名“demoTable”在双括号中。所以你应该使用单括号。将“demoTable”替换为“demoTable”。我也更新了我的答案。 我删除了 demoTable,但仍然没有。出于某种原因,使用 fetchAll(PDO::FETCH_BOTH) 解决了我的问题。我还是不明白。

以上是关于PDO 在表格中显示结果的主要内容,如果未能解决你的问题,请参考以下文章

我的 pdo 结果在表中重复

搜索按钮未在表格上显示特定数据

js如何在表格风显示结果

在表格中显示查询结果

PDO事物配合表格读取大量插入,亲测可用

如何根据文本字段的搜索结果在表格视图中显示行