如果我更改查询中的值,则回显的结果保持不变

时间:2016-03-05 02:57:27

标签: php mysql pdo

我有这个类用户,里面有一个名为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.

enter image description here

当使用这些值运行这些方法时,它们都返回1.即使引用接受0的行的方法没有删除,并且已接受1的方法也会删除。我的猜测是$ stmt-> execute()对于已接受0的方法返回true。但为什么呢?它不满足查询的标准,因为接受不是= 1.函数按照它们的预期工作,并且对于我的使用它无关紧要,如果它返回1或2,因为最终结果是相同的(它只是删除接受1)的正确行但我很好奇这是什么原因。如果有人能对此有所了解,我会非常感激。如果我对这个问题的解释令人困惑,请道歉。我很困惑。 : - (

1 个答案:

答案 0 :(得分:1)

查询成功后,

true会返回 DELETE 。如果WHERE且没有与PDOStatement::execute()子句匹配的行,则表示您已成功删除零行。

如果某些事件干扰了查询的执行,则

false仅返回 {{1}}