1

私は現在、アップロードされたCSVをupload.phpで読み取ってから、このデータをデータベースにアップロードする必要があります。

現時点では、CSV ファイルから配列と正しいデータを取得していて、正しいデータをデータベースに挿入しようとしていることがわかりますが、最終的にデータをデータベースに挿入しているようには見えません。

これは何ですか?

以下のコード:

アップロード.php

<?php
include('config.php');

$file = "test.csv";
$separator = ",";
$length = 0; // size of the longest line(!), 0 = no limit
$fields = array('title', 'firstName', 'secondName', 'emailAddress', 'houseNumber', 'mobileNumber', 'address1', 'address2', 'address3', 'address4', 'postcode'); // use it as a white list

$handle = fopen($file, "r");

// get 1st line (header) and flip keys and values
// format like [title] --> 0, [firstName] --> 1, ...
$header = array_flip(fgetcsv($handle, $length, $separator));

$values = array();

// while we can read lines as csvData:
while(($csvData = fgetcsv($handle, $length, $separator)) !== false){
    foreach ($fields as $field){ // put all values in an array in correct order
        $values[] = $csvData[$header[$field]];
        echo $field."<br>";
        mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES (" . implode(',', $values) . ")"); 
    }
}
fclose($handle);

?>

前もって感謝します。

4

1 に答える 1

1

クエリは文字列を引用符で囲んでいません:

mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES (" . implode(',', $values) . ")"); 

次のような SQL が生成されます。INSERT INTO csv (foo,bar,baz) VALUES (a,b,c);

試す:

mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES ('" . implode("','", $values) . "')"); 

でも。さらに良いのは、パラメータ化されたクエリに切り替えるmysqliか、使用することです。PDO現状では、コードは SQL インジェクションに対して脆弱です。

mysql_error発生した最後の SQL エラーを提供し、問題の追跡に役立つことに注意してください。

于 2013-07-09T13:09:47.687 に答える