PDO 查询总是返回 1 或 true

PDO query is always returning 1 or true

我试图在删除某行之前检查它是否存在。我的 table 中的行不存在,但它总是 returns 1:

$orders = $this->db->prepare("SELECT * FROM orders WHERE id=? AND user=?"); 
            $check = $orders->execute(array($message,$this->model->checkapi($data,$message)));
            echo $check;
            if($check){
            $deleteorder = $this->db->prepare("DELETE FROM orders WHERE id=? AND user=?"); 
            $deleteorder->execute(array($message,$this->model->checkapi($data,$message)));
                array_push($result, array('success' => true,
                                          'deleted' => $message));
                echo json_encode(array("result" => $result));
                die();
            }else{

$this->model->checkapi($data,$message) returns 伪造用户名和 id/$message returns 136

我已经检查了我的数据库,ID 存在,但 id 和用户名不在一起。

我正在发送 ID:136 和用户名:fakeuser

在数据库中,该行以 id:136 和用户名存在:demo.

我不确定为什么当由于不匹配而不应选择该行时返回 1。

你应该在 execute() 之后使用 fetch(),因为 execute() 只是 returns TRUE 成功或 FALSE 失败:

$orders->execute(...
$result = $orders->fetch(PDO::FETCH_ASSOC);
print_r($result);

execute succeeds, it returns TRUE. In your case, the query succeeds, it just returns 0 rows, which is a completely valid result. If you want to check whether the query returned any rows, you could attempt to fetch从结果:

$orders->execute(array($message,$this->model->checkapi($data,$message)));
$check = $orders->fetch();
if ($check) {

话虽如此,但我认为这整个方法都是错误的 - 删除单个行并不比查询该行要重得多,如果有的话。在最坏的情况下,如果它存在,您将执行两个语句而不是一个。我会继续发送删除语句,如果它不影响任何行(因为它们不存在),那就这样吧。