0

我试图让用户使用组合框查询数据库。第一个组合框显示数据库中的表列表。当用户选择一个表时,会运行另一个查询,该查询应该使用该表中的列名填充第二个组合框(这将用作查询的选择)我有第一个组合框工作,但我无法获得第二个填充。有人能帮忙吗?非常感谢

这是我的html代码

<form id="ownQueryForm" name="ownQueryForm" method="POST" action="">

    <div id = "tableSelect_div">
        <P> Select table to Query: </P>

            <select name = "Tables" id = "Tables" onchange = 'this.form.submit()'>
                <option value = "blank"> Please choose a Table</option>
                <?php foreach (($tableContent) as $row) : ?>
                <option value = "<?php echo $row['Tables_in_DB_EXECUTION_MANAGER_TEST']; ?>"><?php echo $row['Tables_in_DB_EXECUTION_MANAGER_TEST'];?></option>
                <?php endforeach ?>

            </select>   


    </div>

    <div id = "columnSelect_div">
        <p>SELECT</p>
            <select name = "Columns" id = "Columns">
                <?php foreach (($columnContent) as $row) : ?>
                <option value = "<?php echo $row['COLUMN_NAME']; ?>"><?php echo $row['COLUMN_NAME'];?></option>
                <?php endforeach ?>
            </select>
    </div>


</form>

到目前为止,这是我的两个查询

    public static function getTables(){
    global $db;

    $st = $db->prepare("show tables");
    $st ->execute();
    $table = $st->fetchAll(PDO::FETCH_ASSOC);

    return $table;


}

public static function getColumns(){
    global $db;
    $st = $db->prepare("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :value ");
    $st->bindParam(':value', $_POST['Tables'], PDO::PARAM_STR);

    $st -> execute();
    $column = $st -> fetchAll(PDO::FETCH_ASSOC);

    return $column;
    //print_r($column);
}

}

我正在使用一个控制器,该控制器用于呈现 getTable(在模型中)以及 getColumns 作为同一控制器上的两个单独函数。可以这样做吗?
我在控制器中有这个但它永远不会运行(除非我取出 if 语句)然后它在页面加载时运行

if (isset ( $_POST ['Tables'] )) {


$c = new ownQueryController();
$c ->queryRequest();

}

4

1 回答 1

1

你可以使用:

'DESCRIBE ' . $_POST[ 'Tables' ]

而不是

"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :value "

这应该返回一个包含名称、类型、限制等的列数组。然后您可以遍历每一列并显示它。

警告

您需要确保您的 POST 数据可以安全地放入查询中。正如@andy 建议的那样,如果您只使用它,您的表可能会被删除。

于 2013-09-24T10:10:56.937 回答