如何使用 fputcsv 和爆炸来获取分隔格式的循环数据



我正在使用以下指南尝试将数据转换为csv分隔的格式,但是我遇到了一些错误。该指南显示了爆炸和fputcsv一起使用。

我做错了什么?

这是我正在使用的指南:

https://www.w3schools.com/php/func_filesystem_fputcsv.asp

错误:

警告:explode() 期望参数 2 是字符串,数组在/home4/public_html/csvTest.php 第 25 行给出

警告:fputcsv() 期望参数 2 是数组,null 在第 25 行的/home4/public_html/csvTest 中给出.php

法典:

$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql_subscribers = "
SELECT *
FROM test_notif
ORDER BY date_subscribed
";
$subscriber_stmt = $con->prepare($sql_subscribers);
$subscriber_stmt->execute();
$subscriber_rows = $subscriber_stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($subscriber_rows as $subscriber_row) {
fputcsv($file,explode(',',$subscriber_row));
}

完整代码:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$file_name = "subscriber_list.csv";
$file = fopen("subscriber_list.csv","w");
try {
$servername = 'localhost';
$usernameCon = '';
$passwordCon = '';
$con = new PDO('mysql:host='.$servername.';dbname=', $usernameCon, $passwordCon);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql_subscribers = "
SELECT *
FROM test_notif
ORDER BY date_subscribed
";
$subscriber_stmt = $con->prepare($sql_subscribers);
$subscriber_stmt->execute();
$subscriber_rows = $subscriber_stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($subscriber_rows as $subscriber_row) {
//fputcsv($file,explode(',',$subscriber_row));
fputcsv($file, $subscriber_row);
}
header('Content-type: application/octet-stream');
header("Content-Disposition: attachment; filename='.$file_name.'");
fclose($file);
}   
catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
<body>
<form action="" name="csvForm" target="csvIframe">
<input type="submit" value="Download File">
</form>
<iframe name="csvIframe" src="">
</iframe>
</body>
</html>

fputcsv的第二个参数(根据错误告诉你的)

fputcsv()期望参数 2 是数组

$subscriber_row已经是一个数组

所以:

foreach ($subscriber_rows as $subscriber_row) {
fputcsv($file, $subscriber_row);
}

更新:向用户输出文件的简单示例:

foreach ($subscriber_rows as $subscriber_row) {
//fputcsv($file,explode(',',$subscriber_row));
fputcsv($file, $subscriber_row);
}
header('Content-type: application/octet-stream');
header("Content-Disposition: attachment; filename='.$file_name.'");
fclose($file);
readfile($file_name);
exit;

最新更新