使用php PDO从数据库获取下拉列表的数据

时间:2015-10-26 15:37:42

标签: php html5 pdo

我的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连接数据库。 (也使用表单的bootstrap模板)。现在我想使用项目表中的数据填充这些项目名称。

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

<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>

表单是一个bootstrap模式,当我使用这个代码时,我无法打开模态。还不确定代码是否正确用于获取下拉列表的数据。

如果在任何地方出错,请纠正我。我是使用PDO的新手。

欢迎任何建议

2 个答案:

答案 0 :(得分:1)

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

如果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());
        }

我不是百分之百确定这一点,但我相信实际的执行语句不会发生,直到你进行实际的 - &gt; fetch()调用,这意味着如果你的SQL不好或你的服务器连接不好,在此之前不会抛出任何异常,并且您的原始try / catch块会错过它。

答案 1 :(得分:1)

此问题已解决。

问题在于它没有连接到数据库的模态。不知怎的,这阻止了模态的开启。

以下是正确的代码

<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有详细信息可以连接到我的数据库。