删除发生的“,,”&引用;从MySQL数据库输出PHP

删除发生的“,,”&引用;从MySQL数据库输出PHP,php,mysql,phpmyadmin,text-files,Php,Mysql,Phpmyadmin,Text Files,我使用以下代码将MySQL数据库的内容输出到文本文件中: <?php $host = 'localhost'; $user = 'myusername'; $pass = 'mypassword'; $db = 'mydbname'; $table = 'mytablename'; $file = 'outputfilename'; $link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_e

我使用以下代码将MySQL数据库的内容输出到文本文件中:

<?php
$host = 'localhost';
$user = 'myusername';
$pass = 'mypassword';
$db = 'mydbname';
$table = 'mytablename';
$file = 'outputfilename';

$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");

$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
//$csv_output .= $row['Field']."; ";
$i++;
}
}
$csv_output .= "\n";

$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j].",";
}
$csv_output .= "\n";
}
//echo $csv_output;
$myFile = "output.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = $csv_output;
fwrite($fh, $stringData);
fclose($fh);
exit;
?>
使用。类似这样(未经测试):

问题在于:

$values = mysql_query("SELECT * FROM ".$table."");
如果得到
,,,
,则表示某些列没有值。检测这些列,不要将它们包含在
SELECT
语句中


如果您将自动(preg_replace,str_replace)将多个逗号更改为一个逗号,则可以很好地损坏CSV文件。

无需
preg_replace()

简单一点就够了

$stringData = str_replace(',,,', ',', $csv_output);
str\u replace()

添加此代码:

while ($csv_output=str_replace(',,', ',', $csv_output)) echo '.';
或更改代码:

for ( $j=0; $j<$i; $j++) {
    $csv_output .= (isset($rowr[$j])) ? $rowr[$j]."," : '';
}

对于($j=0;$jar)您是否关心三个或两个以上的问题?
,,,,,,,
将变成
,,,
。这可以接受吗?同意关于CSV文件损坏的评论。@XcodeDev-任何多个逗号(甚至2个)自动更改为一个逗号都可能导致CSV损坏我已决定将其更改为以下“n/a”而不仅仅是一个逗号.CSV(逗号分隔的值)-如果得到“value1,value3”意味着value2为空-您不需要更改任何内容-文件将被正确读取-如果需要良好的“n/a”视觉再现-继续并执行它-它是您的script@MattBall
preg_replace
在这里有点过分了,不是吗?:)是的,
str\u replace()
在这种情况下更好。但是-我不是PHP爱好者,所以这不是我想到的答案。
不是元字符,因此没有必要逃避它。模式
/,,/
的工作原理应该相同。
while ($csv_output=str_replace(',,', ',', $csv_output)) echo '.';
for ( $j=0; $j<$i; $j++) {
    $csv_output .= (isset($rowr[$j])) ? $rowr[$j]."," : '';
}