所以我有一个以下系统,想要检查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();
}
这个问题是它在插入joe
和joe
之后将错误返回到数据库中。那么我该如何防止这种情况发生呢?
这是我目前在数据库中的内容
+-----+-------------+-----------+
| id | follow_from | follow_to |
+-----+-------------+-----------+
| 256 | joe | joe |
+-----+-------------+-----------+
答案 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,他没有关注任何人