我的mysqli INSERT代码遇到了一些麻烦。
我真的不知道如何处理重复项,但是我在那儿读了很多文章,并尽力使它起作用,但是当我用相同的变量执行此代码时,行数增加了。您能帮我修复此代码或找到另一种检查重复项的方法吗?

  // 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();
  }

最佳答案

ON DUPLICATE KEY依赖于定义的PRIMARY或UNIQUE键。这意味着关键字定义的列对于两行不能相同。

例如,如果您像这样在email上输入了UNIQUE键:
CREATE INDEX matka_email ON matka (email)
那么当您尝试插入一条记录并且该电子邮件地址已经存在时,它将在ON DUPLICATE KEY之后更新查询中定义的字段

请注意,唯一键可能涉及几列,如下所示:
CREATE INDEX matka_alldata ON matka (jmeno, prijmeni, bydliste, telefon, email)
查看文件:

  • https://dev.mysql.com/doc/refman/5.7/en/create-index.html
  • 09-10 07:27
    查看更多