2016-12-07 8 views
-1

データベースにデータを挿入したいのですが、実行しようとするとエラーになります。データはASCファイルから得られ、データを抽出しますが、コードを実行するとエラーになります。これは、コードとエラーです:整合性制約違反:1062データベースにCSVデータを入力しようとしたときにキー 'PRIMARY'の重複エントリ ''

<?php 
echo '<pre>'; 
error_reporting(E_ALL); 
function importdb() 
{ 

    $producten= []; 
    $File2  = $_FILES['file2']['tmp_name']; 
    $handle2 = fopen($File2, "r"); 
    include('db_config.php'); 
    while(($data2 = fgetcsv($handle2, 1000, ";")) !== FALSE) { 

     if (isset($data2[1]) && mb_strlen($data2[1]) > 0) 
     { 
      $type    = $data2[0]; 
      $artikel   = $data2[1]; 
      $prijs1   = $data2[6]; 
      $prijs2   = $data2[7]; 
      $prijs3   = $data2[8]; 
      $prijs4   = $data2[9]; 
      $prijs5   = $data2[10]; 
      if (isset($producten[$artikel])) 
      { 
       $product_id = $producten[$artikel]; 
       $stmt2 = $db->prepare("INSERT INTO `prijzen`(`artikelnr`, `prijs_soort`, `prijs1`, `prijs2`, `prijs3`, `prijs4`, `prijs5`) VALUES (:nmr, :soort, :prijs1, :prijs2, :prijs3, :prijs4, :prijs5)"); 
       $stmt2->bindParam(":nmr", $artikel); 
       $stmt2->bindParam(":soort", $type); 
       $stmt2->bindParam(":prijs1", $prijs1); 
       $stmt2->bindParam(":product_id", $product_id); 
       $stmt2->bindParam(":prijs2", $prijs2); 
       $stmt2->bindParam(":prijs3", $prijs3); 
       $stmt2->bindParam(":prijs4", $prijs4); 
       $stmt2->bindParam(":prijs5", $prijs5); 

       $stmt2->execute(); 

       print_r($data2); 

      }else{ 
       $product_id = $producten[$artikel]; 
       $stmt2 = $db->prepare("INSERT INTO `prijzen`(`artikelnr`, `prijs_soort`, `prijs1`, `prijs2`, `prijs3`, `prijs4`, `prijs5`, `product_id`) VALUES (:nmr, :soort, :prijs1, :prijs2, :prijs3, :prijs4, :prijs5, :product_id)"); 
       $stmt2->bindParam(":nmr", $artikel); 
       $stmt2->bindParam(":soort", $type); 
       $stmt2->bindParam(":prijs1", $prijs1); 
       $stmt2->bindParam(":product_id", $product_id); 
       $stmt2->bindParam(":prijs2", $prijs2); 
       $stmt2->bindParam(":prijs3", $prijs3); 
       $stmt2->bindParam(":prijs4", $prijs4); 
       $stmt2->bindParam(":prijs5", $prijs5); 

       $stmt2->execute(); 

       print_r($data2); 
      } 


     }else{ 
     } 
    } 



} 
importdb(); 

そして、これは誤りです:

(!) Notice: Undefined index: 790148 in C:\wamp64\www\jodeco\import.php on line 40 
Call Stack 
# Time Memory Function Location 
1 0.0008 379360 {main}() ...\import.php:0 
2 0.0008 379808 importdb() ...\import.php:64 



(!) Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '790148' for key 'PRIMARY' in C:\wamp64\www\jodeco\import.php on line 51 
(!) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '790148' for key 'PRIMARY' in C:\wamp64\www\jodeco\import.php on line 51 
Call Stack 
# Time Memory Function Location 
1 0.0008 379360 {main}() ...\import.php:0 
2 0.0008 379808 importdb() ...\import.php:64 
3 0.0047 409056 execute () ...\import.php:51 

これは私が呼ばれるの$ productenを作成してい配列とは何かを持っているのでしょうか?私は配列の使用にかなり新しいです。

誰かがこれがなぜ起こるか知っていますか?それは本当に私を悩ましています。

+2

右側にサイドバーがありますが、*驚くほど*完全に*同じ問題に疑問があります。 –

+0

スキーマが正しい場合は、データが間違っています。データが正しい場合、スキーマは間違っています**どちらも表示できません** – RiggsFolly

答えて

0

これは、エラーメッセージを検討することが役立つ場合です。エラーメッセージを見てください。内心、またはフ、またはゲシュタルト、またはあなたがその深い意味を呼ぶものを探してください。

すべてのことを知りたい。ただメッセージを読んでください。常にメッセージを読んでください。メッセージの最初と最後のの最後のを必ず読んでください。

あなたのCSVファイルに、値790148を含む複数の行が含まれているように見えます。これを伝える方法?エラーメッセージには、それはあなたのテーブルが既にその値を持つ行が含まれていることも可能ですし、CVSファイルが重複した値を追加しようとしている

Integrity constraint violation: 1062 Duplicate entry '790148' for key 'PRIMARY'

を言います。

INSERT ... ON DUPLICATE KEY UPDATEを読むことはできますが、重複をどのように処理するかを確認する前に確認してください。

関連する問題