我有这个类用户,里面有一个名为deleteFriend的方法。这使用PDO查询来删除数据库表中的行。
$db = new PDO('mysql:host=localhost;dbname=goal;charset=utf8','root','');
$auth_id = 5;
$user_user_id = 6;
echo User::deleteFriend($auth_id, $user_user_id, $db);
echo User::deleteFriend($user_user_id, $auth_id, $db);
正如您所看到的,这种方法被称为2种方式。当auth_id为5或6时删除。当user_user_id为6或5.以下是具有已接受的添加参数的查询必须为1.
public function deleteFriend($auth_id, $user_id, $db){
$stmt = $db->prepare("DELETE FROM `friends` WHERE `user_id` = ? AND `friend_id` = ? AND `accepted` = '1'");
$stmt->bindParam(1, $auth_id);
$stmt->bindParam(2, $user_id);
if($stmt->execute()){
return 1;
}else{
return 2;
}
}
现在是我感兴趣的部分。下面你可以看到我有2行。一个user_id为6,另一个为5.另一行的friend_id为5,另一行为6.
当使用这些值运行这些方法时,它们都返回1.即使引用接受0的行的方法没有删除,并且已接受1的方法也会删除。我的猜测是$ stmt-> execute()对于已接受0的方法返回true。但为什么呢?它不满足查询的标准,因为接受不是= 1.函数按照它们的预期工作,并且对于我的使用它无关紧要,如果它返回1或2,因为最终结果是相同的(它只是删除接受1)的正确行但我很好奇这是什么原因。如果有人能对此有所了解,我会非常感激。如果我对这个问题的解释令人困惑,请道歉。我很困惑。 : - (
答案 0 :(得分:1)
true
会返回 DELETE
。如果WHERE
且没有与PDOStatement::execute()
子句匹配的行,则表示您已成功删除零行。
false
仅返回 {{1}} 。