2016-03-23 21 views
0

PHPを使用してMySQLテーブルにCSVを解析しています。SQLクエリの開始時刻と終了時刻を取得する

  1. 私は私のテーブル「のStartTime」(ファイルの構文解析の開始)と呼ばれる「ファイル」、「終了時間」(ファイルの構文解析の終了)と「のCreationDate」(時間にタイムスタンプ列を持っています行が作成されました)。これらの時代を得るにはどんな方法がありますか? NOW()は良い解決策ですか?

  2. 「エラーが発生した行」とは、エラーが発生して解析されない行の数です。 CSVファイルでエラーのある行の数を取得するにはどうすればよいですか? [varchar型、int型、タイムスタンプ、タイムスタンプ、タイムスタンプ]]

はここに私のコードです:

function parse($file) { 

$file_handle = fopen($file, "r"); //opens CSV 
while (($row = fgetcsv($file_handle, 1000, ",")) !== false){ 

$file_name = basename($file); 
$Rows_with_errors = ?; 
$StartDate= date("Y-m-d H:i:s", time()); //? 
$EndDate=?; 
$CreationDate=?; 

$sql = "INSERT INTO file (Filename, TotalNumberOfRows, RowsWithErrors, StartDate, EndDate, CreationDate) 
VALUES('$file_name','$Total_nr_of_Rows', '$Rows_with_errors', '$StartDate', '$EndDate', '$CreationDate')"; 

global $conn; 
$conn->query($sql); //executes the query 
} 

if ($sql) 
    { 
     echo 'Data uploaded to database!'; 
    } 
else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
} 
} 
(エラーのある行は、例えば、それがあるべき、種類が間違っている行になります

答えて

0

私はこれを実行することはありません、この作品を願っています。説明は、コード内にある。

<?php 

function parse($file) { 

    //Initialize some variables here. Probably in some constants etc. 
    $dateRegex = '|^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$|'; //Just a rough check. I purposely skip the case of like 9999-99-99 99:99:99. Up to you to refine this. 
    $dateFormat = 'Y-m-d H:i:s'; 

    //In fact checking the file exist or not is probably useful too: 
    //if (is_file($file)) ... 

    //Opens CSV in read mode 
    $file_handle = fopen($file, "r"); 

    //We don't need to put this in the loop since it's a one time job 
    $file_name = basename($file); 

    //We also initialize the variable outside the while loop so that we can increment it 
    $Rows_with_errors = 0; 
    $Total_nr_of_Rows = 0; 

    //StartDate of the parsing, shouldn't it be outside of the while loop too? 
    //Also, using "date" will gives you the time in the timezone that you set in your php.ini's date.timezone property. 
    //Using "gmdate" will gives you the time in GMT time. 
    $StartDate = date($dateFormat, time()); 

    while (($row = fgetcsv($file_handle, 1000, ",")) !== false) { 

     ++$Total_nr_of_Rows; 

     //So here, we are looping row by row. Do your checking here: 
     if (!(is_string($row[0]) && 
      is_numeric($row[1]) && 
      preg_match($dateRegex, $row[2]) && 
      preg_match($dateRegex, $row[3]) && 
      preg_match($dateRegex, $row[4]))) { 

       //Increment the error 
       ++$Rows_with_errors; 
     } 
    } 

    //That's it. We insert it now 
    //Creation date & end date, probably the same, no? we initialize here: 
    $CreationDate = $EndDate = date($dateFormat, time()); 

    //This is bad. There is no escaping, and YOU ARE RISK OF QUERY INJECTION FROM THE $file_name VARIABLE. 
    //I won't discuss it here since this is not the scope of the question. 
    $sql = "INSERT INTO file (Filename, TotalNumberOfRows, RowsWithErrors, StartDate, EndDate, CreationDate) 
VALUES('$file_name','$Total_nr_of_Rows', '$Rows_with_errors', '$StartDate', '$EndDate', '$CreationDate')"; 

    global $conn; 
    $conn->query($sql); //executes the query 

    if ($sql){ 
     echo 'Data uploaded to database!'; 
    }else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
    } 
} 
+0

それは働いていた、ありがとう! – user212121232323