从Mysql表中提取特定列到CSV文件 - PDP - MYSQL- PHP

时间:2016-12-26 18:47:38

标签: php mysql csv pdo

我编写了以下代码,用于将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);

3 个答案:

答案 0 :(得分:2)

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

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

但您可以使用PDO::FETCH_ASSOCPDO::FETCH_NUM,以便$row包含列数组。然后,您可以在fputcsv()中使用它。

答案 1 :(得分:1)

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

  

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

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

fputcsv($data, [$fname]);

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

答案 2 :(得分:-1)

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

这是问题

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