【问题标题】:Why can't I get info from a PDO associative array to echo?为什么我不能从 PDO 关联数组中获取信息来回显?
【发布时间】:2017-05-07 20:42:03
【问题描述】:

在下面的代码中,没有发生 echo 语句。这尤其令人沮丧,因为我在前一页上有一个相同的 while 循环,其中有一个几乎相同的查询,加上带有 GET 和 POST 值的按钮,功能非常好。

另外,如您所见,我有这行: print_r($dispData = $getData->fetch(PDO::FETCH_ASSOC)) 并且完美的打印出关联数组的结果。

下面是整个文档。


<?php

  error_reporting(E_ALL);
  ini_set('display_errors', 1);

  session_start();

  include 'connect.php';

  $username = $_SESSION['username'];

?>

<html lang="en">

  <head>
    <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>47th Personnel Management Portal</title>
      <!-- Bootstrap -->
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
      <script src="js/bootstrap.js"></script>
      <script src="js/bootstrap.min.js"></script>
  </head>

  <body>

    <?php
      #Include navigation
      include 'navbar.php';

      #Verify edit button's GET value was set
      if(isset($_GET['edit']))
      {
        try
        {
          #Assign variable to edit button's GET value which is members.member_ID
          $member_id = $_GET['edit'];
          #Prepare query
          $getData = $db->prepare("SELECT members.member_id, groups.g_title, members.members_display_name, members.title, pfields_content.field_17, pfields_content.field_18, members.email, from_unixtime(members.last_visit), members.m_awards_display, members.m_awards
                                    FROM members
                                      INNER JOIN groups ON members.member_group_id = groups.g_id
                                      INNER JOIN pfields_content ON members.member_id = pfields_content.member_id
                                    WHERE members.member_id = :member");
          #Sanitize data by binding SQL variable to PHP variable
          $getData->bindParam(':member', $member_id, PDO::PARAM_INT);
          $getData->execute();
        }

        catch(PDOException $e)
        {
            echo 'ERROR: ' . $e->getMessage();
        }
      }

      else
      {
          echo 'This user does not exist.';
          print_r($_GET);
      }
     ?>

      <div class="container">
        <div class="jumbotron">
            <div class="table-responsive">

              <table class="table" id="table">

                <thead>
                  <tr>
                    <th>47ID</th>
                    <th>Rank/Grade</th>
                    <th>Name</th>
                    <th>Title</th>
                    <th>Vexillation</th>
                    <th>Section</th>
                    <th>Email</th>
                    <th>Last Visit</th>
                    <th>Awards</th>
                  </tr>
                </thead>

              <tbody>

                <?php
                    #Print array for debugging purposes
                    print_r($dispData = $getData->fetch(PDO::FETCH_ASSOC));

                    //Fetch data and display items
                    while ($dispData = $getData->fetch(PDO::FETCH_ASSOC)) {

                      #Replace keys with human readable
                      if ($dispData['field_17'] == "c") {
                        $dispData['field_17'] = "Century";
                      }
                      if ($dispData['field_17'] == "v") {
                        $dispData['field_17'] = "Civilian";
                      }
                      if ($dispData['field_17'] == "a") {
                        $dispData['field_17'] = "Alliance";
                      }
                      if ($dispData['field_17'] == "r") {
                        $dispData['field_17'] = "Reception";
                      }
                      if ($dispData['field_17'] == "1") {
                        $dispData['field_17'] = "1st";
                      }
                      if ($dispData['field_17'] == "2") {
                        $dispData['field_17'] = "2nd";
                      }
                      if ($dispData['field_17'] == "3") {
                        $dispData['field_17'] = "3rd";
                      }
                      if ($dispData['field_17'] == "4") {
                        $dispData['field_17'] = "4th";
                      }
                      if ($dispData['field_17'] == "e") {
                        $dispData['field_17'] = "Reserve";
                      }
                      if ($dispData['field_17'] == "l") {
                        $dispData['field_17'] = "Legion";
                      }
                      if ($dispData['field_18'] == "n") {
                        $dispData['field_18'] = "N/A";
                      }
                      if ($dispData['field_18'] == "a") {
                        $dispData['field_18'] = "Alpha";
                      }
                      if ($dispData['field_18'] == "b") {
                        $dispData['field_18'] = "Bravo";
                      }
                      if ($dispData['field_18'] == "c") {
                        $dispData['field_18'] = "Charlie";
                      }
                      if ($dispData['field_18'] == "d") {
                        $dispData['field_18'] = "Delta";
                      }
                      if ($dispData['field_18'] == "h") {
                        $dispData['field_18'] = "HQ";
                      }

                      echo "<tr><td>"
                      .$dispData['member_id']."</td><td>"
                      .$dispData['g_title']."</td><td>"
                      .$dispData['members_display_name']."</td><td>"
                      .$dispData['title']."</td><td>"
                      .$dispData['field_17']."</td><td>"
                      .$dispData['field_18']."</td><td>"
                      .$dispData['email']."</td><td>"
                      .$dispData['from_unixtime(members.last_visit)']."</td></tr>

                      <form action='update_row.php' method='POST' style='display:inline-block;'>
                        <button type='submit' class='btn btn-primary' name='update' value='".$dispData['member_id']."' onclick='return confirm_update()'>Update</button>
                      </form></td></tr>";
                  }
                ?>

          </tbody>
        </table>

        </div>
      </div>
    </div>

  </body>

</html>

<script>
  function confirm_update() {
    return confirm('Are you sure you want to delete this user?');
  }
</script>

【问题讨论】:

  • 你真的有一个名为 from_unixtime(members.last_visit) 的数据库列吗? PHP没有错误?
  • 你有一行作为查询的结果吗?

标签: php pdo while-loop echo


【解决方案1】:

除非出现逻辑错误,否则您的代码看起来不错。

函数$getData-&gt;fetch(PDO::FETCH_ASSOC) 从结果集中获取一个行。因此,当您运行 $getData-&gt;fetch(PDO::FETCH_ASSOC) 再次 时,它会获取 第二 行,第三次调用 - 它会获取第三行,等等。

因此,如果您有 一行 作为查询的结果,则行

print_r($dispData = $getData->fetch(PDO::FETCH_ASSOC));

将获取它。但是第二次调用

while ($dispData = $getData->fetch(PDO::FETCH_ASSOC))

将获取nothing,因为已经获取了一行并且没有任何内容。

这也意味着,当您在结果集中有两行或更多行时,您的代码

print_r($dispData = $getData->fetch(PDO::FETCH_ASSOC));

将打印第一行,所有其他行除了第一行将用于 html 输出。

所以,我建议你从你的代码行中删除:

print_r($dispData = $getData->fetch(PDO::FETCH_ASSOC));

出于调试目的,请使用以下内容:

while ($dispData = $getData->fetch(PDO::FETCH_ASSOC)) {
    print_r($dispData);

    // other codes
}

【讨论】:

  • 天啊,是的,这是我一直用于调试目的的打印行。哇。谢谢你。希望我在七个小时前问过这个问题,lulz。
猜你喜欢
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多