我有一个结构类似于$data = array{0=>'abc',1=>xyz,2=>tqs}
现在我需要将这些值写入csv文件。我需要在第一列中显示每个值,并且每次在新插入时都显示新行以及之前已有的值。
下面是我正在使用的代码,但每次执行时我都会得到文件中的最后一个值:
for ($c=0; $c < $num; $c++) {
echo $data[$c];
echo $query = "select prod_sku,prod_name
from
tbl_product
where
prod_sku = '".$data[$c]."'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if(empty($row)){
print_r($row);
echo 'test';
$fp = fopen("file.csv", "w");
print_r($data[0]);
fputcsv($fp, $data[0]);
fclose($fp);
}
我如何使用PHP实现这一目标?
答案 0 :(得分:5)
问题是你在for循环中正在进行fopen
,所以每次循环运行时,你的文件都会被重写。将fopen
和fclose
移到循环外部即可。像这样;
$fp = fopen("file.csv", "w");
for ($c=0; $c < $num; $c++)
{
$query = "select prod_sku,prod_name from tbl_product where prod_sku = '".$data[$c]."'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
fputcsv($fp, $data);
}
fclose($fp);
答案 1 :(得分:0)
如果您使用MySQL,则可以使用SELECT ... INTO OUTFILE
:
SELECT prod_sku, prod_name
INTO OUTFILE '/tmp/products.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM tbl_product
WHERE 1