使用组合框填充另一个组合框,以便用户可以运行查询


using combo box to populate another combo box so that a user can run a query

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

这是我的 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();

}

您可以使用:

'DESCRIBE ' . $_POST[ 'Tables' ]

而不是

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

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

警告

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