2017-04-27 27 views
3

我想要做的是在我的數據庫中導入一個CSV文件。 CSV文件的第一列名爲mydate,其格式爲m.d.Y H:i:s。我試圖從php中的表單插入文件。這裏是代碼:如何在MYSQL中使用STR_TO_DATE和INSERT INTO

if(isset($_POST["Import"])){ 

    $filename=$_FILES["file"]["tmp_name"]; 
    if($_FILES["file"]["size"] > 0){ 

     $file = fopen($filename, "r"); 
     while (($getData = fgetcsv($file, 10000, ",")) !== FALSE){ 

      $conn=getdb(); 

      $sql = "INSERT into pay (Mydata,ID,Transaction,ReceiptNo,ServiceID,) 
        values (STR_TO_DATE(Mydata, '%m.%d.%Y %H:%i:%s'),'".$getData[1]."','".$getData[2]."','".$getData[3]."','".$getData[4]."')"; 

它導入除第一個列以外的所有列中的數據。我不明白我做錯了什麼。我見過很多STR_TO_DATEINSERT INTO的例子,我認爲我寫它的方式是正確的。但仍然不起作用。

+1

'STR_TO_DATE(MYDATA, '%M%d%Y%H:%I:%S')'?我想你必須給出一個日期字符串'Mydata' ins登錄 –

+1

轉換它的PHP並傳遞查詢中的變量。試過了嗎? –

+0

@AlivetoDie在一些教程中,我發現我可以把列的名字放在那裏。它的工作原理,如果我在mysql工作臺中使用它 – irena

回答

0

我用LOAD DATA INFILE解決了這個問題。

這裏是我使用的代碼:

if(isset($_POST["Import"])){   
    $filename=str_replace("\\", "/", $_FILES["file"]["tmp_name"]); 
    if($_FILES["file"]["size"] > 0){     
     $conn=getdb();    
     $sql = "LOAD DATA LOCAL INFILE '".$filename."' 
       INTO TABLE pay 
       FIELDS OPTIONALLY ENCLOSED BY '\"' TERMINATED BY ',' 
       LINES TERMINATED BY '\\n' 
       (@Mydata,ID,Transaction,ReceiptNo,ServiceID) 
       SET Mydata = STR_TO_DATE(@Mydata, '%m.%d.%Y %H:%i:%s')"; 
    } 
} 
+0

幹得好,但你的解決方案和解釋的大部分屬於你的答案,而不是問題。請刪除您的問題更新並在答案中提供您的信息解決方案。感謝您致力於自我解決併爲社區提供答案 - 這是非常好的公民身份。 – mickmackusa

+0

@mickmackusa我剛剛刪除了更新並將解決方案放在答案中。非常感謝你的幫助。 – irena

+0

我編輯了你的答案,爲你的'LOAD DATA INFILE'語句提供了一個鏈接。是否有任何有用的提示,或者您在實施此解決方案時必須制定的有用提示?這些類型的添加可以爲將來的SO研究者節省大量的時間和心痛。如果您有更多的功能屬於這些嵌套的條件塊,它可能會幫助未來的讀者看到您的完整查詢過程,包括錯誤檢查和affected_rows檢查。一個全面的答案提供了最好的教育,並會在長期內爲您贏得更多的讚譽。 – mickmackusa

0

你能做到這樣

$sql = "INSERT into pay (Mydata,ID,Transaction,ReceiptNo,ServiceID,) 
values (date('m/d/Y H:i:s', strtotime(MyData)),'".$getData[1]."','".$getData[2]."','".$getData[3]."','".$getData[4]."')"; 
+0

我把這個strtotime寫成這樣的'values(date('mdY H:i:s',strtotime(Mydata)),'「。$ getData [1]。'','」。$ getData [2]。'' ,''。$ getData [3]。「','」。$ getData [4]。「')'現在它向我顯示這個錯誤:**未捕獲mysqli_sql_exception:你的SQL語法錯誤;請檢查與您的MariaDB服務器版本相對應的手冊,以便在'strtotime(Mydata)'附近使用正確的語法)** – irena

+0

Mydata應該是一個變量,它保存您csv中單元格的值。 $ Mydata ='CSVcellThatHoldsTheDate'; 然後用date('m/d/YH:i:s',strtotime($ MyData)) –

+0

這樣的事情:$ Mydata1 = $ getData [0];? – irena