1

CSV をアップロードしてデータベースにデータを挿入するこの PHP コードがあります。while ループでアップロードすると、CSV から 1 行だけが選択されます。

//do upload
    if (is_uploaded_file($_FILES['dd_submission_form']['tmp_name']))
    {
        echo "<h3>" . "File ". $_FILES['dd_submission_form']['name'] ." uploaded successfully." . "</h3>";
        echo '<h3>Display file contents:</h3>';
        //readfile($_FILES['dd_submission_form']['tmp_name']);
    }

    //Import uploaded file to Database
    $handle = fopen($_FILES['dd_submission_form']['tmp_name'], "r");

    fgetcsv($handle, 1000, ",");

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    {
        $sql="SELECT * from customer where directdebit_reference = '".$data[0]."' ";
        echo $sql;
        $rs=mysql_query($sql,$conn) or die(mysql_error());
        $customer=mysql_fetch_array($rs);
        if(mysql_num_rows($rs) > 0)
        {
            $sql2="INSERT into dd_submissions (customer_seq, dd_reference, sortcode, account_number, account_name, amount, bacs_code, invoice_no, title, initial, forename, surname, salutation_1, salutation_2, address_1, address_2, area, town, postscode, phone, mobile, email, notes) values ('".$customer["sequence"]."', '$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]', '$data[5]', '$data[6]', '$data[7]', '$data[8]', '$data[9]', '$data[10]', '$data[11]', '$data[12]', '$data[13]', '$data[14]', '$data[15]', '$data[16]', '$data[17]', '$data[18]', '$data[19]', '$data[20]', '$data[21]', '$data[22]')";
            $rs2=mysql_query($sql2,$conn) or die(mysql_error());
        }
    }
    fclose($handle);
    print "<br><br><h3>Successfully Imported Clients</h3><br>";
4

6 に答える 6

2

最も簡単な方法は、次のようcontinueにループ内でキーワードを使用することです。while

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  if ($i == 0) { $i++; continue; }
  ...
  $i++;

ただし、安全のために、最初の行に必要なデータが含まれていないことを確認する必要があります。

于 2013-08-02T14:56:11.647 に答える
0

csv ファイルからの行の読み取りが中断される理由として考えられるのは、csv ファイル内のデータに、SQL クエリを中断する一重引用符または二重引用符が含まれている可能性があるため、この問題はmysql_real_escape_string関数を使用して解決できることです。したがって、新しい挿入クエリは次のようになります。

....
......

$sql2="INSERT into dd_submissions (customer_seq, dd_reference, sortcode, account_number, account_name, amount, bacs_code, invoice_no, title, initial, forename, surname, salutation_1, salutation_2, address_1, address_2, area, town, postscode, phone, mobile, email, notes) values ('".mysql_real_escape_string($customer["sequence"])."', '".mysql_real_escape_string($data[0])."', .......);

それが役に立てば幸い...

于 2013-10-08T07:57:49.427 に答える