如果 user_id 和 post_id 相同,我如何从我的数据库中删除一个赞?

How can I delete a like from my database if user_id and post_id are the same?

我想检查用户是否已经喜欢 post,如果是,则从喜欢的数据库中删除该用户。

我试过做一个 if 语句,但它不会到达 else,即使 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;
        }

如果你第一次按赞你应该喜欢 post 并且它应该存储在数据库中,如果你再次按你不喜欢 post 并且它会从数据库中删除.但是现在它只做Addlike功能...

根据 https://www.php.net/manual/en/pdostatement.fetchall.php#refsect1-pdostatement.fetchall-examples.

,我认为 PDO::FETCH_ASSOC returns 与 PDOStatement::fetchAll 一起使用时是一个多维数组

尝试将您的代码更改为类似这样的代码,看看它是否有效。您也可以尝试转储 $result 变量以查看结构的样子。

if($result[0]["COUNT(*)"] == 0){
    $this->Addlike();
}else{
    $this->Deletelike();
}

如果数组索引不存在,PHP 认为它是假的,这可以解释为什么你总是添加喜欢,因为 PHP 在 PHP.

如果要避免 false 和 0 的这种等价性,请使用相同的运算符来比较类型:

if ($result["COUNT(*)"] === 0) {
...