【问题标题】:How to get database table header information into an CSV File如何将数据库表头信息获取到 CSV 文件中
【发布时间】:2010-03-29 15:39:34
【问题描述】:

我正在尝试连接到数据库并获取表的当前状态并将该信息更新到 csv 文件中,使用下面提到的一段代码,我能够将数据信息获取到 csv 文件中,但无法获取标题信息从数据库表到 csv 文件。

所以我的问题是如何将数据库表头信息放入 CSV 文件中?

$config['database'] = 'sakila';
$config['host'] = 'localhost';
$config['username'] = 'root';
$config['password'] = '';

$d = new PDO('mysql:dbname='.$config['database'].';host='.$config['host'], $config['username'], $config['password']);
$query = "SELECT * FROM actor";
$stmt = $d->prepare($query);

// Execute the statement
$stmt->execute();

var_dump($stmt->fetch(PDO::FETCH_ASSOC));

$data = fopen('file.csv', 'w');

while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    echo "Hi";
    // Export every row to a file
    fputcsv($data, $row);
}

头信息含义:

Vehicle     Build   Model
 car        2009    Toyota
 jeep       2007    Mahindra

因此,标题信息将是 Vehicle Build Model

我们将不胜感激任何指导。

【问题讨论】:

    标签: php mysql csv


    【解决方案1】:

    只需从数组 $row:array_keys() 中获取键。现在你有了所有的列名,你可以把它们放在你的 csv 文件中。

    ======= 编辑 =======

    <?php
    
    $header = array();
    
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        if(empty($header)){ // do it only once!
          $header = array_keys($row); // get the columnnames
          fputcsv($data, $header); // put them in csv
        }
    
        echo "Hi";
        // Export every row to a file
        fputcsv($data, $row);
    }
    ?>
    

    【讨论】:

    • 如果您能详细解释一下,我将不胜感激。
    • @Frank:它怎么知道它是否是一个标题?
    • @Frank:这种方法有效,但我不确定标题发生了什么,您能否详细解释这将如何工作,可能通过 cmets 以便我可以更好地理解它所以我可以从中学习。
    • Rachel,函数 array_keys() 从数组 $row 中获取所有键。在我的示例中,array_keys() 填充了数组 $header,并且该数组被写入您的 csv 文件中。由于 if{},这仅执行一次。另请参阅 PHP 手册的超链接。
    • @Frank:谢谢你,Frank,现在我明白了。感谢您的指导。
    【解决方案2】:

    使用 SHOW COLUMNS FROM 将为您获取来自 .然后,您可以使用它们编写 CSV 的第一行:

    // Do this before adding the rows from the database
    $query = "SHOW COLUMNS FROM some_table";
    $stmt = $d->prepare($query);
    $stmt->execute();
    $columns = '';
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        $columns .= $row['Field'] . ',';
    }
    $columns = substr($columns, 0, -1);
    fputcsv($data, $columns);
    

    【讨论】:

    • 你能解释一下我如何用它们写 CSV 文件的第一行,因为现在它没有被更新到 CSV 文件中吗?
    • 是的。我现在正在处理它,谢谢你的详细解释。
    • 不需要额外查询,只需要从数组$row中获取信息
    【解决方案3】:

    使用mysqldump:

    mysqldump -u user -p --fields-terminated-by=',' --tab=/tmp mydatabase mytable
    

    上述命令将在 /tmp 中创建 2 个文件。 mytable.sql 和 mytable.txt。 sql 文件将包含表创建模式,txt 文件将包含 mytable 表的记录,字段由逗号分隔。

    【讨论】:

    • 它只创建了 .sql 文件而不是 .txt 文件,我是不是在这里遗漏了什么。
    【解决方案4】:

    您已经在PDO::FETCH_ASSOC 中拥有它:返回一个按您的结果集中返回的列名索引的数组

    编辑: 获取和写入列名称的一种方法是(将其放在您的 while lopp 之前)

    fputcsv($data, array_keys($stmt->fetch(PDO::FETCH_ASSOC)));
    

    阅读php arrays 和特别是关联数组以及数组上的函数(例如array_keys)。对特定问题的回答不能代替对数组等基本概念的理解。

    【讨论】:

    • 我如何获取该标头信息,我不确定我们如何使用数据库标头信息。
    猜你喜欢
    • 2018-05-17
    • 1970-01-01
    • 2021-08-29
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2012-06-19
    • 2012-10-31
    相关资源
    最近更新 更多