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

问题描述 投票:1回答:1

我想检查用户是否已经喜欢该帖子,如果是这样,请从数据库中删除用户。

我试图做一个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功能......

php mysql facebook-like
1个回答
0
投票

根据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) {
...
© www.soinside.com 2019 - 2024. All rights reserved.