如果 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) {
...
我想检查用户是否已经喜欢 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) {
...