通过PHP从数据库显示COLUMN NAMES

时间:2014-03-21 12:53:51

标签: php mysql sql

我正在尝试从数据库'settings'中提取所有列名,并将它们列在PHP中。

有一些研究得出以下结论:

SHOW COLUMNS FROM settings

但我不知道如何通过PHP列出这些内容。 如果发布的任何代码是预先准备好的语句格式,那将会很有帮助,但不是必需的。

这是我的PHP,它给了我这个错误:

Notice: Undefined index: sThumbWidth in /home/demomycm/public_html/subdomains/mercury/eshop/library/classes/class.settings.php on line 204

我的数据库中的每个字段。

$loadColumns = array();

    $query = "SHOW COLUMNS FROM settings";
    $result = $this->glob->dbConn->query($query);
    if($this->glob->dbConn->errno) {
        trigger_error('An error occurred whilst loading counties from the database.' . PHP_EOL . 'Query: ' . $query . PHP_EOL . 'Error[' . $this->glob->dbConn->errno . ']: ' . $this->glob->dbConn->error, E_USER_WARNING);
    } elseif($result->num_rows) {
        while($row = $result->fetch_assoc()) {
            $loadColumns[$row['Field']];
        }
        return $loadColumns;
    }

$loadColumnsHtml = '';
    $loadColumns = $this->Settings->LoadColumns();
    foreach($loadColumns as $i => $field) {
        $loadColumnsHtml .= '<div class="home-stat-small-link">' . ($i + 1) . '. <strong>' . $field['Field'] . '</strong>.</div>';
    }

3 个答案:

答案 0 :(得分:1)

使用describe

DESCRIBE my_table;

或者在较新的版本中,您可以使用INFORMATION_SCHEMA:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

答案 1 :(得分:0)

在您的代码中,您将$loadColumns作为数组 这条线没有任何作用:$loadColumns[$row['Field']];
基本上你使用与$row['Field'关联的密钥获取$ loadColumns中的值而不分配任何内容。

你可能想要这样的东西:

array_push($loadColumns,$row['Field']);

以下完整代码

$loadColumns = array();

    $query = "SHOW COLUMNS FROM settings";
    $result = $this->glob->dbConn->query($query);
    if($this->glob->dbConn->errno) {
        trigger_error('An error occurred whilst loading counties from the database.' . PHP_EOL . 'Query: ' . $query . PHP_EOL . 'Error[' . $this->glob->dbConn->errno . ']: ' . $this->glob->dbConn->error, E_USER_WARNING);
    } elseif($result->num_rows) {
        while($row = $result->fetch_assoc()) {
           array_push($loadColumns,$row['Field']);  //<-- this line has been changed
        }
        return $loadColumns;
    }

$loadColumnsHtml = '';
    $loadColumns = $this->Settings->LoadColumns();
    foreach($loadColumns as $i => $field) {
        $loadColumnsHtml .= '<div class="home-stat-small-link">' . ($i + 1) . '. <strong>' . $field['Field'] . '</strong>.</div>';
    }

答案 2 :(得分:0)

在MySQL连接(不建议使用)上,您可以使用:

mysql_list_fields

关于PDO(推荐)使用:

$query = $dbh->prepare("DESCRIBE tablename");
$query->execute();
$tableFields = $query->fetchAll(PDO::FETCH_COLUMN);

在PDO上,您也可以使用PDOStatement::getColumnMeta()。但它具有以下状态:实验