【问题标题】:Extract specific column from a Mysql Table to a CSV file - PDP - MYSQL- PHP从 MySQL 表中提取特定列到 CSV 文件 - PDP - MYSQL- PHP
【发布时间】:2016-12-26 18:47:38
【问题描述】:

我编写了以下代码来从 Mysql 表中提取列到 CSV 文件。 当我运行脚本时,它会引发以下错误。

警告:fputcsv() 期望参数 2 是数组,在

中给出布尔值

在这一行fputcsv($data, $row); PDO 有问题吗?

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=".date('m.d.Y').'.csv');
header("Pragma: no-cache");
header("Expires: 0");

define('STOREDIR','upload/csv');
    define('ABPATH', dirname(__file__) . '/'); //do not modify this

    $stmt = $con->prepare("SELECT fname from abcgroup where group_id='2'");
    $stmt->execute();
    $stmt->setFetchMode(PDO::FETCH_BOUND);
    $stmt->bindColumn('fname', $fname);

    $filename = ABPATH.STOREDIR.date('m.d.Y').'.csv';
    $data = fopen($filename, 'w');
       while ($row = $stmt->fetch()) {
            fputcsv($data, $row);
        }
        fclose($data);

【问题讨论】:

    标签: php mysql csv pdo


    【解决方案1】:

    当您使用PDO::FETCH_BOUND 时,$stmt->fetch() 返回truefalse,而不是结果行。结果存储在与$stmt->bindColumn 绑定的变量中。所以你需要使用:

    fputcsv($data, array($fname));
    

    但您可以只使用PDO::FETCH_ASSOCPDO::FETCH_NUM,这样$row 将包含列数组。然后你就可以照常在fputcsv() 中使用它了。

    【讨论】:

    • 这不会在 CSV 文件中返回任何内容
    • 对不起,我的意思是array($fname)
    • 看到echo $fname的名字了吗?
    • 我的查询返回在 phpmyadmin 中显示第 0 - 13 行(共 14 行,查询耗时 0.0021 秒)
    • @user580950 请执行echo $fname 如果可行,请检查fputcsv() 的返回值(也可以在它前面添加一个回显,看看它是否返回写入的字节数)
    【解决方案2】:

    因为您使用的是PDO::FETCH_BOUND,所以您对fetch() 的调用不会返回数据行。如果成功,它将仅返回 true 并将列内容绑定到您的变量。来自manual

    PDO::FETCH_BOUND:返回 TRUE 并将结果集中列的值分配给使用 PDOStatement::bindColumn() 方法绑定到的 PHP 变量

    如果您想将fname 的内容放入您的 CSV 文件中,请改用:

    fputcsv($data, [$fname]);
    

    或者使用不同的获取方式来获得行数组,例如PDO::FETCH_ASSOC

    【讨论】:

    • 这不会在 CSV 文件中返回任何内容
    • @user580950 仅当 $fname 为空时。你能检查你的查询是否返回正确的结果吗?
    • 我的查询返回在 phpmyadmin 中显示第 0 - 13 行(共 14 行,查询耗时 0.0021 秒)
    【解决方案3】:

    $stmt = $con->prepare("SELECT fname from abcgroup where group_id='2'");

    问题来了

    检查上面的行(表名以及表和数据库的其他详细信息,如列名和行等...)

    【讨论】:

    • 那个查询有什么问题,我觉得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多