У меня есть массив, структура которого подобна $data = array{0=>'abc',1=>xyz,2=>tqs}
Теперь мне нужно записать эти значения в файл csv. Мне нужно отобразить каждое значение в 1-м столбце и с каждой новой строкой на новой вставке вместе с предыдущим значением, уже имеющимся.
Ниже приведен код, который я использую, но каждый раз, когда я его выполняю, я получаю последнее значение в файле:
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?
Проблема в том, что вы делаете fopen
внутри цикла for, поэтому каждый раз, когда цикл работает, ваш файл переписывается. Переместите 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);
Если вы используете 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