0

左結合選択クエリを使用して csv エクスポート スクリプトを作成しました。Localhost サーバー (Windows 8) では同じデータで正常に動作していますが、Web サーバー (Linux) ではうまく動作していません。

すべての行が Localhost で連続してエクスポートされます。しかし、同じ MySQL データを使用した同じクエリが Web サーバーから間違ってエクスポートされます。

たとえば、説明列の後の行 261 で、行 261 の残りの列を含む新しい行に分割されます。また、行 263 から行 415 まで正常にデータがエクスポートされます。説明の後に新しい Excel 行として再び分割されます。その後、再び 1133 まで正常にエクスポートされます。新しい Excel 行としての説明の後、再び壊れました。

この問題が理解できません。スクリプトの何が問題になっていますか?

$values = mysql_query("SELECT 
            t1.inqty, IFNULL(t2.outqty, '0') outqty, (IFNULL(t1.inqty,'0') - IFNULL(t2.outqty, '0')) totalHand, 
            t1.serialno, 
            (SELECT projectname FROM projects WHERE t1.project_id = projects.project_id) AS ProjectName, 
            TRIM(t1.productid), 
            TRIM(t1.description), 
            TRIM(t1.revisionstate),
            TRIM(t1.remarks), 
            (SELECT username FROM wms_users WHERE t1.userid = wms_users.id) AS UserName,
            (SELECT cusname FROM customerinfo WHERE t1.cus_id = customerinfo.cus_id) AS CustomerName,
            t1.inserteddate
        FROM
            (
                SELECT *, SUM(in_quantity) inqty FROM stockin GROUP BY serialno
            ) t1 LEFT JOIN
            (
                SELECT serialno, SUM(out_quantity) outqty FROM stockout GROUP BY serialno
            ) t2
        ON t1.serialno = t2.serialno
        ");
$headings = array('INQTY','OUTQTY','TOTAL IN HAND','SerialNo','Project Name','ProductID','Description','Revision State','Remarks','Username','Customer Name','Inserted Date');
$i = 0;
foreach ($headings as $heading) {
    $csv_output .= $heading . ",";
    $i++;
}
$csv_output .= "\n";
while ($rowr = mysql_fetch_row($values)) {
    for($j = 0; $j < $i; $j++) {
        $csv_output .= $rowr[$j] . ",";
    }
$csv_output .= "\n";
}
ob_end_clean();

$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
//header("Content-type: text/csv");
header('Content-Length: ' . strlen($csv_output) );
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");
print $csv_output;
exit;
4

1 に答える 1

0

CSV を使用して localhost からデータをエクスポートし、データにコンマ "," 値が含まれていて、値を " で囲んでいなかったと思います。これは、CSV メソッドで常に発生する可能性があります。

LOAD DATA を使用して、このような問題を回避できます。例は

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'

( MySQL にテーブルをインポートするときに CSV 値内のコンマをエスケープする方法から取られた上記の行? ) 例の目的

http://dev.mysql.com/doc/refman/5.1/en/load-data.htmlで詳細を確認できます

于 2013-08-24T06:57:41.847 に答える