【问题标题】:Getting data for dropdownlist from database using php PDO使用 php PDO 从数据库中获取下拉列表的数据
【发布时间】:2015-10-26 15:37:42
【问题描述】:

我的 html 页面中有一个表单,用于将数据插入数据库。在表格中,我有一些字段的下拉列表。我想从数据库中获取下拉列表的数据。

以下是之前使用的代码(硬编码下拉)

<div class="form-group">
<label for="proj_name" class="col-sm-4 control-label">Project Name</label>
<div class="col-sm-8">
    <select name="proj_name"  id="proj_name" class="form-control" >
        <option selected="true" value="" data-hidden="true" style="color:red">Choose Project</option>
        <option value="Project1">Project1</option>
        <option value="Project2">Project2</option>
        <option value="Project3">Project3</option>
        <option value="Project4">Project4</option>
    </select>   
</div>

我正在使用 PDO 连接到数据库。 (也使用引导模板作为表单)。现在我想使用项目表中的数据填充这些项目名称。

我正在使用以下代码修改上述代码:

<div class="form-group">
    <label for="proj_name" class="col-sm-3 control-label" style="color:red">Project Name</label>
    <div class="col-sm-9">
        <?php

            try
            {
                 $sql = "select proj_id,proj_name from tblProject";
                 $projresult = $db->query($sql);                       
                 $projresult->setFetchMode(PDO::FETCH_ASSOC);


            }
            catch (PDOException $e)
            {   
                die("Some problem getting data from database !!!" . $e->getMessage());
            }

            echo '<select name="proj_name"  id="proj_name" class="form-control" >';

            while ( $row = $projresult->fetch() ) 
            {
               echo '<option value="'.$row['proj_name'].'">'.$row['proj_name'].'</option>';
            }

            echo '</select>';

        ?>                                                          

    </div>
</div>

表单处于引导模式,当我使用此代码时,我无法打开模式。也不确定代码是否正确用于获取下拉列表的数据。

如果哪里有错,请纠正我。我是使用 PDO 的新手。

欢迎提出建议

【问题讨论】:

  • 使用的方法?形式?发布数组?不清楚
  • 您好,表单提交的方式是post。还需要其他信息吗??
  • 您是否尝试过在页面中而不是在模式中运行此代码?在这种情况下你会得到什么?
  • 这段代码在页面中单独运行时正在运行。但是在引导模态中运行,模态根本没有打开,所以不知道它是否有效。 (之前try部分有错误,已更正)

标签: php html pdo


【解决方案1】:

我认为代码本身没有任何问题,但我建议将 FETCH 调用移到 try/catch 中。

如果您的 FETCH 调用失败,此时,您不会在任何地方捕获异常,并且您希望在尝试将其余数据转储到屏幕之前捕获该异常。

编辑: 示例:

        try
        {
             $sql = "select proj_id,proj_name from tblProject";
             $projresult = $db->query($sql);                       
             $projresult->setFetchMode(PDO::FETCH_ASSOC);


             echo '<select name="proj_name"  id="proj_name" class="form-control" >';

             while ( $row = $projresult->fetch() ) 
             {
                echo '<option value="'.$row['proj_name'].'">'.$row['proj_name'].'</option>';
             }

             echo '</select>';
        }
        catch (PDOException $e)
        {   
            die("Some problem getting data from database !!!" . $e->getMessage());
        }

我对此不是 100% 确定,但我相信实际的执行语句在您进行实际的 ->fetch() 调用之前不会发生,这意味着如果您的 SQL 错误或服务器连接错误,在此之前不会抛出异常,并且您原来的 try/catch 块会错过它。

【讨论】:

  • @sravankumar 我添加了一个代码块和更多解释。
  • 谢谢。我会调查一下
  • 然而它完全解决了我的问题,但你建议的是一种更好的编程实践
【解决方案2】:

这个问题已经解决了。

问题出在未连接到数据库的模式中。不知何故,这阻止了模式打开。

以下是正确的代码

<div class="form-group">
    <label for="proj_id" class="col-sm-3 control-label" style="color:red">Project ID *</label>
    <div class="col-sm-9">

    <?php 

        require 'DBconnect.php';    // connect to Database

        try
        {
                 $sql = "select proj_id,proj_name from tblProject";
                 $projresult = $db->query($sql);
                 $projresult->setFetchMode(PDO::FETCH_ASSOC);

                 echo '<select name="proj_id"  id="proj_id" class="form-control" >';

             while ( $row = $projresult->fetch() ) 
             {
                echo '<option value="'.$row['proj_id'].'">'.$row['proj_name'].'</option>';
             }

             echo '</select>';
            }
            catch (PDOException $e)
            {   
                die("Some problem getting data from database !!!" . $e->getMessage());
            }



    ?>

   </div>
</div>

考虑马克的建议。

DBconnect.php 有连接到我的数据库的详细信息。

【讨论】:

  • 你明白为什么吗?数据库连接没有打开,并且 SQL 在调用 ->fetch() 之前不会执行,所以如果你的连接出现错误,你必须确保在 ->fetch() 调用之后捕获异常。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2012-04-18
  • 1970-01-01
  • 2017-03-08
相关资源
最近更新 更多