我试图让用户使用组合框查询数据库。第一个组合框显示数据库中的表列表。当用户选择一个表时,运行另一个查询,该查询应该填充第二个组合框,其中包含该表中的列名(这将用作查询的选择)我有第一个组合框工作,但我无法得到第二个填充。有人能帮忙吗?非常感谢
这是我的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();
}
答案 0 :(得分:1)
您可以使用:
'DESCRIBE ' . $_POST[ 'Tables' ]
而不是
"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :value "
这应该返回一个列的数组,包括它们的名称,类型,限制等。然后你可以遍历每一列并显示它。
警告
您需要确保将POST数据安全放入查询中。正如@andy所建议的,如果您只是使用它,您的表可能会被丢弃。