首先,我有这个小的 PDO 代码片段,它可以让我获得服务器上所有可用的数据库以及表的另一个函数:
每当我从数据库列表中选择并提交一个选项时,我都需要在下面的选择菜单中显示其相应的表。我设法用 foreach 显示数据库,但我有点错过了为什么这不起作用。
提前感谢任何答案/解决方案:)
请参阅下面的代码修订,以实现您正在寻找的内容。
<form method='post' action="<?php $_SERVER['PHP_SELF']; ?>">
<?php
define('PDO_USER', 'root');
define('PDO_PASS', '');
function getDatabases(PDO $pdo) {
$stmt = $pdo->query('SHOW DATABASES');
$result = $stmt->fetchAll();
$dbs = array();
foreach($result as $row) {
$dbs[] = $row['Database'];
}
return $dbs;
}
$pdo = new PDO('mysql:host=localhost', PDO_USER, PDO_PASS);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$databases = getDatabases($pdo);
// Table code
$selectedDB = (!empty($_POST['database'])) ? $_POST['database'] : null;
function getTables(PDO $pdo, $databaseName) {
if(!in_array($databaseName, getDatabases($pdo))) {
return array();
}
$stmt = $pdo->query('SHOW TABLES FROM '.$databaseName);
$result = $stmt->fetchAll();
$tables = array();
foreach($result as $row) {
$tables[] = $row['Tables_in_'.$databaseName];
}
return $tables;
}
$tables = array();
if(!empty($selectedDB)) {
$tables = getTables($pdo, $selectedDB);
}
?>
Database:
<select name='database'>
<?php foreach($databases as $row): ?>
<option value="<?php echo $row; ?>"><?php echo $row; ?></option>
<?php endforeach; ?>
</select> 
<input type='submit' name='formSubmit' value='Submit'></form>
UPDATE
<select name='formTable1'>
<?php foreach($tables as $tbName): ?>
<option value='<?php echo $tbName; ?>'><?php echo $tbName; ?></option>
<?php endforeach; ?>
</select>
几点注意事项:
您需要在表单标签中包含“action”属性,以便为表单提供提交的目标 URL。
在您最初的选择中,您有 2 个名称属性(name='formDatabases[]' name='database')。每个表单元素应该只有一个名称,该名称被确定用作该特定字段的 $_POST 数组中的键。
如果您希望特定的 POST 项目在 PHP 中是一个数组,您应该只在 HTML 中使用“name='var[]'”格式。否则你可以使用“name='var'”