2017-05-08 92 views
0

我想從variuse CSV文件插入價格,sku和鏈接到數據庫。要做到這一點,我遍歷每個CSV文件,並與值($sql)堆積一個字符串。但它不會插入到我的數據庫......SQL查詢每次失敗... PHP

這是我如何堆疊的$sql字符串例如:

$sql = "INSERT INTO cron (sku, price, link) VALUES" . " \n"; 


    if((stripos($inputFilename, "bok24"))){ 
     // Loop through each row creating a <row> node with the correct data 
     while (($row = fgetcsv($inputFile, 0, $delimiter)) !== false) { 
      if(($row[0] != null) || ($row[0] != "")){ 
       $sql .= "(\"" . $row[0] . "\",\"" . $row[4] . "\",\"" . $row[20] . "\"),"; 
      } 
     } 

    ... other CSV files 

要檢查其中的錯誤是我打印$sql串入一個文件。我打印字符串到文件之前,他得到s escaped by mysqli_real_escape(...)`和後記......

$myfile = fopen("data/sql.txt", "a"); 
    fwrite($myfile, $sql . "\n\n"); 
    fclose($myfile); 

    $sql = substr($sql, 0, -1) . ";"; 
    $sql = $GLOBALS["database"]->real_escape_string($sql); 

    if($GLOBALS["database"]->query($sql) === TRUE){ 
     echo "Successfully transfered to database!\n"; 
    }else{ 
     echo "ERROR by transferring to database!\n"; 
    } 

    $myfile = fopen("data/sql.txt", "a"); 
    fwrite($myfile, $sql . "\n\n"); 
    fclose($myfile); 

在這個文件中,你可以找到逃脫,沒有逃脫變化。但我沒有看到我的錯誤...有人可以幫我,告訴我我的錯誤在哪裏?

Here you can find the sql.txt file(搜索\ n以獲取文件中的下一個sql字符串)。

問候和謝謝你!

+1

理想的MySQL沒有一個單一的INSERT語句值上限。 但是,您可能正在達到** max_allowed_pa​​cket **的限制,默認情況下爲1MB。您可以嘗試更改MySql的max_allowed_pa​​cket大小限制,或者可以將插入語句拆分爲多個插入語句。 –

+0

將其分解爲多個插入,每個插入100行,這對於您的設置在一個SQL語句中插入太大。 – Martin

+0

爲什麼你需要單插入查詢?你可以在循環中插入數據? –

回答

0

你可以這樣做:

if((stripos($inputFilename, "bok24"))){ 
     // Loop through each row creating a <row> node with the correct data 
     $counter_inserted = 0; 
     while (($row = fgetcsv($inputFile, 0, $delimiter)) !== false) { 
      if(($row[0] != null) || ($row[0] != "")){ 
       $sql = "INSERT INTO cron (sku, price, link) VALUES" . " \n"; 
       $sql .= "(\"" . $GLOBALS["database"]->real_escape_string($row[0]) . "\",\"" . $GLOBALS["database"]->real_escape_string($row[4]) . "\",\"" . $GLOBALS["database"]->real_escape_string($row[20]) . "\"),"; 
       if($GLOBALS["database"]->query($sql)){ 
        $counter_inserted++; 
       } 
      } 
     } 

echo $counter_inserted;會告訴你多少記錄是如何插入