我想检查用户是否已经喜欢该帖子,如果是这样,请从数据库中删除用户。
我试图做一个if语句,但它不会到达其他地方,只有在user_id和post_id相同时才添加喜欢。
Like.class.php
private function Addlike(){
$conn = db::getInstance();
$query = "insert into likes (post_id, user_id) values
(:post_id, :user_id)";
$statement = $conn->prepare($query);
$statement->bindValue(':post_id',$this->getPostId());
$statement->bindValue(':user_id',$this->getUserId());
$statement->execute();
}
private function Deletelike(){
$conn = db::getInstance();
$query = "DELETE FROM likes WHERE post_id = :post_id
AND user_id =:user_id";
$statement = $conn->prepare($query);
$statement->bindValue(':post_id',$this->getPostId());
$statement->bindValue(':user_id',$this->getUserId());
$statement->execute();
}
public function CheckLike(){
$conn = db::getInstance();
$query = "SELECT COUNT(*) FROM likes WHERE
post_id=:post_id AND user_id=:user_id";
$statement = $conn->prepare($query);
$statement->bindValue(':post_id',$this->getPostId());
$statement->bindValue(':user_id',$this->getUserId());
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
if($result["COUNT(*)"] == 0){
$this->Addlike();
}else{
$this->Deletelike();
}
return $result;
}
如果你第一次按这样你应该喜欢的帖子,它应该存储在数据库中,如果你再次按下你不像帖子,它会从数据库中删除。但现在它只做Addlike功能......
根据PDO::FETCH_ASSOC
的说法,我认为PDOStatement::fetchAll
在与https://www.php.net/manual/en/pdostatement.fetchall.php#refsect1-pdostatement.fetchall-examples一起使用时会返回一个多维数组。
尝试将代码更改为类似的内容,看看它是否有效。您还可以尝试转储$result
变量以查看结构的外观。
if($result[0]["COUNT(*)"] == 0){
$this->Addlike();
}else{
$this->Deletelike();
}
如果数组索引不存在,PHP认为它是假的,这可以解释为什么你总是添加喜欢,因为PHP中的false == 0
。
如果要避免false和0的等效性,请使用相同的运算符来比较类型:
if ($result["COUNT(*)"] === 0) {
...