Php 当结果来自pdo时,putcsv格式错误

Php 当结果来自pdo时,putcsv格式错误,php,mysql,csv,pdo,fputcsv,Php,Mysql,Csv,Pdo,Fputcsv,我试图通过pdo从数据库导入数据,并将结果输出到csv文件。我能够正确地输出到屏幕,但csv中的格式是野生的、双重名称且没有“\n” <?php require_once('auth.php'); $conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $pw); if (($handle = fopen("nameList2.txt", "r")) !== FALSE) { while (($d

我试图通过pdo从数据库导入数据,并将结果输出到csv文件。我能够正确地输出到屏幕,但csv中的格式是野生的、双重名称且没有“\n”

<?php
require_once('auth.php');
$conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $pw);

if (($handle = fopen("nameList2.txt", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, "        ")) !== FALSE) {
                $firstname = $data[0];
                $lastname = $data[1];
                $stmt = $conn->prepare("SELECT * FROM list WHERE FName = :firstname AND LName = :lastname");
                $stmt->bindParam(':firstname', $firstname);
                $stmt->bindParam(':lastname', $lastname);
                $stmt->execute();
                $result = $stmt->fetchAll();
                //var_dump($firstname);
                //var_dump($lastname);
                //var_dump($result);
                $fp = fopen('file.csv', 'w');
                foreach($result as $chunk){
                        echo $chunk[4]."        ".$chunk[6]."   ".$chunk[7]."   ".$chunk[10]."  ".$chunk[11]."".$chunk[12]."  ".$chunk[13]."  ".$chunk[18]."  ".$chunk[19]."  ".$chunk[20]."<br />";
                        fputcsv($fp, $chunk);
                }
                fclose($fp);
        }
        fclose($handle);
        //fclose($fp);
}

?>


您使用双重名称的问题是因为您没有使用fetchAll()方法。对:
您在$result中获得两次名称。 使用以下命令:

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
要解决此问题,\n请尝试

ini_set('auto_detect_line_endings', true);

您正在输入
fputcsv
错误的数据,因此它会给您错误的输出。具体地说,
fetchAll
将每一行检索为一个数组,其中包含数字键和字符串键,因此每个值显示两次

例如,通过适当设置获取模式来解决此问题

$result = $stmt->fetchAll(PDO::FETCH_NUM);

现在还不清楚行尾的问题是什么——你没说,从截图上我也看不出来。可以确定的是,
fputcsv
写入一个换行符作为行终止字符。尽管绝大多数程序都能正确地检测和处理这些Unix风格的行尾,但还有一些程序(如记事本)不能正确地检测和处理这些行尾。

谢谢,这让它变得更清晰了。实际上有点太多了。它正确地输出第一行,仅此而已。只有一个,其余的都没有/关于如何获取其余数据有什么想法吗?PDO::FETCH_ASSOC seams将我的查询全部放在一起->注意:未定义的偏移量:第19行的/blah/query2.php中的4是的,它破坏了我的第19行,这没什么大不了的,我只是注释掉了它。但实际上,PDO::FETCH_ASSOC与上面的建议类似,只输出第一行,而不输出其他内容。它似乎丢失了查询的其余部分。噢,改变$fp=fopen('file.csv','w');到$fp=fopen('file.csv','a');fopen('file.csv','a');修好了