【问题标题】:How to prevent inserting duplicate records?如何防止插入重复记录?
【发布时间】:2016-08-24 05:32:57
【问题描述】:

我想让我的 PHP 检查我的数据库表中是否已经存在具有相同特定数据的内容。

我有一个名为 test 的数据库和一个名为 users 的表。

这是我想检查是否存在具有相同 $steamid 编号的行 steamid

<?php

// Datebase infomation
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$steamid = $steamprofile['steamid'];

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

$sql = "INSERT INTO users (steamid)
VALUES ('$steamid')";

if (!$conn->query($sql) === TRUE) {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

【问题讨论】:

  • 你知道“REPLACE INTO”吗?
  • 不,这是怎么回事?
  • 如果主键存在则更新行,否则创建一行。
  • 哦,好吧,我试试看:)

标签: php mysql mysqli


【解决方案1】:

您需要在steamid 列上添加PRIMARY KEYUNIQUE constraint

删除所有重复项后,您可以运行以下命令:

ALTER TABLE users ADD PRIMARY KEY(steamid)

如果您尝试将重复的 steamid 插入到 users 表中,您的查询将失败。

作为@Jeremy mentioned,您可以使用REPLACE,但这也可以使用only works if you have a PRIMARY KEY or UNIQUE constraint on the column。如果除了要存储在数据库表中的 steamid 之外还有其他列,这是首选方法,因为它将更新这些值。但是,由于您在问题INSERT INTO users (steamid) VALUES ('$steamid') 中所述的查询仅包含一个字段,因此除非您想捕获尝试重复记录的条件错误,否则它不会产生太大影响,在这种情况下您应该坚持使用INSERT声明。

【讨论】:

  • 谢谢,我知道了。
猜你喜欢
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2012-08-17
相关资源
最近更新 更多