检查重复记录

时间:2014-06-30 13:15:42

标签: php html mysql sql database

所以我有一个以下系统,想要检查joe是否跟随joe,用户名是唯一的。所以我基本上想阻止用户跟随自己。这就是我现在所拥有的

if($_SESSION['loggedIn'] == true){
    $result1 = $con->prepare("SELECT * FROM followers WHERE follow_from = :username AND follow_to = :username");
    $result1->bindParam(':username', $follower);
    $result1->bindParam(':post_id', $username);
    $result1->execute();
    $reprint1 = $result1->rowCount();
}

if($reprint1 == 1){
    echo 'Error';
    exit();
}

elseif($_SESSION['loggedIn'] == true && $reprint1 == 0){
    $result = $con->prepare("SELECT * FROM followers WHERE follow_from = :username AND follow_to = :post_id");
    $result->bindParam(':username', $follower);
    $result->bindParam(':post_id', $username);
    $result->execute();
    $reprint = $result->rowCount();
}
print_r($reprint);

if($result->rowCount() < 1){
    $stmt = $con->prepare("INSERT INTO followers (follow_from, follow_to) VALUES (:ff, :ft)");
    $stmt->bindValue(':ff', $follower, PDO::PARAM_STR);
    $stmt->bindValue(':ft', $username, PDO::PARAM_STR);
    $stmt->execute();
}
else{
    echo 'Error';
    exit();
}

这个问题是它在插入joejoe之后将错误返回到数据库中。那么我该如何防止这种情况发生呢?

这是我目前在数据库中的内容

+-----+-------------+-----------+
| id  | follow_from | follow_to |
+-----+-------------+-----------+
| 256 | joe       | joe         |
+-----+-------------+-----------+

2 个答案:

答案 0 :(得分:0)

评论时间有点长。

如果您没有使用MySQL,则只需在表中添加check约束:

check (following_from <> following_to)

唉,MySQL支持语法,但没有做任何事情。大多数其他数据库支持check约束。

这给你留下了两个选择。首先是在php中检查$follower != $username。当它们相等时,产生错误或做你想做的事。如果它们不相等,则插入行。

您还可以使用before insert trigger在数据库中强制执行此操作。

答案 1 :(得分:0)

我会在这里质疑你的数据库模型。根据我收集的内容,基本上您拥有可以关注其他用户的用户,并且您希望跟踪哪些用户关注哪些其他用户,同时,当然,确保用户无法关注自己。< / p>

如果此模型正确,则这是一个多对多的自引用关系。在我的脑海中,用户表和用户关系表可以在这里工作。对于每个“连接”,将创建“用户关系”表中的新行,指定两个用户的User.id,从而连接它们。

用户关系表:

+-----+-------------+-------------------+
| id  | follower_id | following_id      |
+-----+-------------+-------------------+
| 1   | 1           | 2                 |
+-----+-------------+-------------------+
| 2   | 2           | 1                 |
+-----+-------------+-------------------+
| 3   | 2           | 3                 |
+-----+-------------+-------------------+

在上面的例子中,用户1和2都互相跟随,但用户2也跟随用户3,他没有关注任何人