我有问题。我试图将数据库中的一些数据转换为.csv表。
$fn=fopen($path.$filename, "w");
$addstring = file_get_contents($path.$filename);
$addstring = 'Azonosito;Datum;Ido;Leiras;IP-cim;allomasnév;MAC-cim;Felhasznalonev;Tranzakcioazonosito;Lekerdezes eredmenye;Vizsgalat ideje;Korrelacios azonosito;DHCID;';
/*$addstring .= "\n";*/
$sql="select * from dhcpertekeles.dhcpk";
$result =mysqli_query($conn, $sql);
if ($result=mysqli_query($conn,$sql))
{
while ($row=mysqli_fetch_row($result))
{
$addstring .= "\n".$row[0].";".$row[1].";".$row[2].";".$row[3].";".$row[4].";".$row[5].";".$row[6].";".$row[7].";".$row[8].";".$row[9].";".$row[10].";".$row[11].";".$row[12].";";
};
};
/*file_put_contents($path.$filename, $addstring);*/
fwrite($fn, $addstring);
fclose($fn);
数据采用以下格式: 第一个addstring包含列名,没有问题
第二个(addstring。=)包含数据: ID($ row [0]),Date($ row [1]),Time($ row [2]),Description($ row [3]),IP($ row [4]),计算机名($ row) [5]),MAC($ row [6]),User($ row [7])(空),Transactionid($ row [8]),查询结果($ row [9]),查询时间($ row) [10]),相关id($ row [11])(空),DHCID($ row [12])(空)
它基本上是每日DHCP服务器数据,上传到数据库。现在,代码工作,它确实写了我想要的所有csv,但有2个问题。
1,代码出于某种莫名其妙的原因,在包含数据的行之间的csv表中插入一个空行。删除$ row [12]解决了这个问题。我尝试删除特殊字符,将空格转换为可以看到的东西,甚至将空字符串转换为可以看到的字符串。然而没有任何实际工作,我甚至尝试了file_puts_content(第二个问题相同)而不是fwrite,但没有。同样的事情不断发生。如果我删除\ n它将起作用,但第二行以后将错误地放在右边1列。
2,由于某种原因,最后2个字符将从csv中删除。插入到csv中的字符串在将其写入文件之前仍包含所述2个字符。尝试了fwrite和file_puts_content。
对于.csv格式,数据列除以;和\ n。
的行还尝试用libre office和excel阅读文件,认为它可能是excel,但是没有。
答案 0 :(得分:1)
尝试使用fputcsv()
功能。我没有测试以下代码,但我认为它应该工作。
$file = fopen($path . $filename, 'w');
$header = array(
'Azonosito',
'Datum',
'Ido',
'Leiras',
'IP-cim',
'allomasnév',
'MAC-cim',
'Felhasznalonev',
'Tranzakcioazonosito',
'Lekerdezes eredmenye',
'Vizsgalat ideje',
'Korrelacios azonosito',
'DHCID'
);
fputcsv($file, $header, ';');
$sql = "select * from dhcpertekeles.dhcpk";
$result = mysqli_query($conn, $sql);
if ($result = mysqli_query($conn, $sql)) {
while ($row = mysqli_fetch_row($result)) {
fputcsv($file, $row, ';');
}
}
fclose($file);
答案 1 :(得分:0)
$row[12] = strtr($row[12], array("\n"=>'', "\r"=>''))
没有做任何事情,因为你在下一行覆盖了那个变量。
要删除12上的额外行,您是否尝试使用以下内容删除\ n AND \ _;
function AsciiToInt($char){
$success = "";
if(strlen($char) == 1)
return "char(".ord($char).")";
else{
for($i = 0; $i < strlen($char); $i++){
if($i == strlen($char) - 1)
$success = $success.ord($char[$i]);
else
$success = $success.ord($char[$i]).",";
}
return "char(".$success.")";
}
}
;
您还可以使用从php网站获取的此函数来检查您在$ row [12]中收到的ascii字符:
mb_detect_encoding
另一个提示可能是它返回UTF-8或UTF-16的数据库,而你在文本文件中丢失了一些字符。
尝试使用{{1}}函数查看它。