Php 当结果来自pdo时,putcsv格式错误
我试图通过pdo从数据库导入数据,并将结果输出到csv文件。我能够正确地输出到屏幕,但csv中的格式是野生的、双重名称且没有“\n”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
<?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');修好了