PDO问题显示适当的数据

时间:2013-08-16 01:45:06

标签: php pdo

首先,我正在使用这个小的PDO代码片段来获取服务器上所有可用的数据库以及表的另一个函数:

每当我从db列表中选择并提交一个选项时,我都需要在下面的选择菜单中显示相应的表格。我设法用foreach显示数据库,但我有点想念为什么这不起作用。

提前感谢任何答案/解决方案:)

1 个答案:

答案 0 :(得分:1)

请参阅下面的代码修订版,以实现您的目标。

<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>&#160;
<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>

几点说明:

  1. 您需要在表单标记中包含“action”属性,以便为表单提供提交的目标URL。

  2. 在原始选择中,您有2个名称属性     (name ='formDatabases []'name ='database')。你应该只有一个     每个表单元素的名称,即确定用作的表单元素     键入该特定字段的$ _POST数组。

  3. 如果您愿意,您应该只在HTML中使用“name ='var []'”格式     特定的POST项目是PHP中的数组。否则你可以     只需使用“name ='var'”

  4. 这可能超出了原始问题的范围,但您可以     想要考虑将数据库业务逻辑分离为一个单独的     class,保持HTML清洁。至少现在,我更新了代码     文件顶部的逻辑,以便可以将其提取到一个     将来更容易上课。这避免了进入PHP Spaghetti字符串代码的危险路径!