我编写了以下代码,用于将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);
答案 0 :(得分:2)
当您使用PDO::FETCH_BOUND
时,$stmt->fetch()
会返回true
或false
,而不是结果行。结果存储在与$stmt->bindColumn
绑定的变量中。所以你需要使用:
fputcsv($data, array($fname));
但您可以使用PDO::FETCH_ASSOC
或PDO::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'");
这是问题
检查上面的行(表名和表和数据库的其他详细信息,如列名和行等)。