2017-02-23 17 views
4

mysqli INSERTコードに問題があります。 重複を扱う方法は本当に分かりませんが、そこに多くの記事を読み込んでいます。同じコードを実行すると、行数が増えます。このコードを修正したり、重複を確認する別の方法を見つけるのを手伝ってもらえますか?mysqliのPHPが存在する場合は編集してください

// Create connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    // Check connection 
    if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
    } 


    if ($stmt = $conn->prepare(
    "INSERT INTO matka (jmeno, prijmeni, bydliste, telefon, email) 
    VALUES (?,?,?,?,?) 
    ON DUPLICATE KEY UPDATE 
    jmeno = VALUES(jmeno), 
    prijmeni = VALUES(prijmeni), 
    bydliste = VALUES(bydliste), 
    telefon = VALUES(telefon), 
    email = VALUES(email)")) { 
    $stmt->bind_param("sssss", $jmeno_matky, $prijmeni_matky, $bydliste_matky, $telefon_matky, $email_matky); 
    $stmt->execute(); 
    printf("%d Row inserted.\n", $stmt->affected_rows); 
    $stmt->close(); 
    $id_matky = $conn->insert_id; 
    $conn->close(); 
    } 
+0

私は作品の前に 'prijmeni = VALUES()'構文を見たことがありませんか?また、同じデータに更新するだけの場合は、無視しても差し支えありません。 – chris85

+0

私はそこにいました:http://stackoverflow.com/questions/22699598/prepared-statement-with-on-duplicate-key 彼のコードは私と同じように見えましたので、試してみました。 INSERT INTO tablename(...)の代わりに使用する必要があります - INSERT IGNORE tablename(..)?? – ochj1ch

+0

'insert ignore'は重複しようとするエラーを無視します。あなたはユニークではないが、それはエラーをスローしません。そこに何かユニークなものを作って、dupが起こらないようにしてください。 – chris85

答えて

6

ON DUPLICATE KEYがPRIMARYまたはUNIQUEキーが定義されているに依存しています。これは、キーが定義されている列を2つの行で同じにすることはできないことを意味します。

あなたは、例えばそのようなemailにUNIQUEキーを行った場合:

CREATE INDEX matka_email ON matka (email)

あなたがしようと挿入したレコードを、電子メールアドレスが既に存在するとき、あなたの中で定義されるように、その後、それがフィールドを更新します

CREATE INDEX matka_alldata ON matka (jmeno, prijmeni, bydliste, telefon, email)

:ユニークなキーがそうのような複数の列を含むことができることを ON DUPLICATE KEY

注後のクエリ

参照ドキュメント:

+0

ありがとう、私はちょうどすべてのデータが存在するかどうかを確認するために使用できると思った。値がすでに存在するかどうかをどうすれば確認すればよいか知っていますか?それは私を助けてくれるでしょう。 – ochj1ch

+1

すべてのフィールドで一意のキーを作成することができます - 例を使って答えを更新します – Theo

関連する問題