PDO查询始终返回1或true

时间:2015-02-08 18:21:24

标签: php sql select pdo sql-delete

我想在删除它之前检查一行是否存在。我表格中的行不存在但总是返回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) 返回fakeusername和id / $ message返回136

我已检查过我的数据库,ID存在,但不是ID和用户名。

我发送了ID:136和用户名:fakeuser

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

存在

我不确定为什么在因为不匹配而不应该选择该行时它会返回1。

enter image description here

2 个答案:

答案 0 :(得分:6)

您应该在fetch()之后使用execute(),因为execute()仅在成功时返回TRUE或在失败时返回FALSE

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

答案 1 :(得分:1)

execute成功后,会返回TRUE。在您的情况下,查询成功,它只返回0行,这是一个完全有效的结果。如果要检查查询是否返回任何行,可以尝试从结果中fetch

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

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