防止mysql表中的重复记录

时间:2015-02-11 00:35:35

标签: php mysql duplicates

我正在创建一个预订活动的网站。我有3个中心。客户无法在不同的中心预订同一活动两次。我在mysql中使用一个表,我存储由客户提供的信息。有没有办法过滤或检查我的PHP代码,如果客户已经多次预订相同的活动并回显错误信息? 我的表(以及我正在询问的信息)包含以下列: ID(主) 名字 姓 电子邮件 联系电话 班级名称 周 强度 CentreName

$values = $_POST;
foreach ($values as &$value) {
$value = mysql_real_escape_string($value);
}

$sql1="INSERT INTO loan (loan_id)
VALUES ('$values[loan_id]')";

$result = mysql_query($sql1);
if (!$result) {
die('Invalid query: ' . mysql_error());
}

3 个答案:

答案 0 :(得分:1)

创建表格时,将唯一属性添加到要阻止的字段中,如下所示

CREATE TABLE Persons
(
P_Id INT NOT NULL AUTO_INCREMENT,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
UNIQUE (P_Id)
)

如果您已经创建了表,只需像这样编辑它

ALTER TABLE Persons
ADD UNIQUE (P_Id)

答案 1 :(得分:0)

您需要在希望唯一的列上创建唯一(复合)索引。在制作唯一索引时,您可以忽略PK。在你的情况下你的SQL看起来像:

Alter table yourtablename 
add unique index idx_unq(`LastName`, `FirstName`, `Email`, `ContactNumber` `ClassName`, `Week`, `Intensity`, `CentreName`);

然后执行INSERT IGNORE INTO而不是INSERT INTO。

这篇文章也可以帮到你。

"INSERT INTO .. ON DUPLICATE KEY UPDATE" Only inserts new entries rather than replace?

为了查看表中是否已存在记录,您必须先测试"查看表中是否存在该确切记录。这是在“插入IGNORE”之前完成的。在你的逻辑中。使用变量,您的代码将如下所示:

$testcount = "Select count(`LastName`, `FirstName`, `Email`, `ContactNumber` `ClassName`, `Week`, `Intensity`, `CentreName`) 
      from yourtablename 
          where 
(LastName = '$LastName' AND FirstName= '$FirstName' AND Email= '$EMAIL' AND ContactNumber= '$ContactNumber' AND ClassName= '$ClassName' AND Week= '$Week' Intensity = '$Intensity' AND CentreName = '$CentreName' )";

此查询将返回(假设表中没有重复项)0或1并将其存储在$ testcount变量中。然后,可以使用它来确定基于将记录插入表中的值,或者向最终用户打印消息,通知它们已经存在。

我不确定你想如何构建php代码,但psuedocode看起来像:

If $testcount = 1 then do your insert.

else if $testcount = 0 then echo your message.

答案 2 :(得分:0)

希望这会对你有所帮助;如果您没有独特的ID,我相信这将最适合您的需求;请注意,这不是完整的代码;您需要在其他信息中添加一些以适合您的问题;

// Checks if the value already exist on the database
$query = SELECT EXISTS(SELECT column_name FROM table_name WHERE 
condition   LIMIT 1)

// If condition is not met it will proceed with save
if (mysql_num_rows(!$query) > 0) {
    echo "Activity Booked";
} else { // If condition is met it will echo an error message
    echo "Unable to booked activity"; }