2015-02-08 154 views
3

我想在删除它之前检查一行是否存在。在我的表中的行不存在,但它总是返回1PDO查询总是返回1或true

$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/$消息返回136

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

我送ID:136和用户名:fakeUser此

在此行存在为ID的DATABSE

:136和用户名:演示。

我不确定为什么它返回1,因为它不匹配的行不应该被选中。

enter image description here

+1

pdo查询在**错误**的情况下返回** false **。你看到错误吗?只是 – 2015-02-08 18:24:02

+0

没有错误的数字1,当我打印错误信息:数组 ( [0] => 00000 [1] => [2] => ) – 2015-02-08 18:26:25

+1

你明白,你的查询工作?无误地工作。这就是真正回归的原因。你能指望什么? – 2015-02-08 18:27:35

回答

6

你应该​​后使用fetch(),因为​​只是未能成功返回TRUEFALSE

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

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

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

话虽如此,这整个的做法给我的印象是错误 - 删除一个单行并未相当重操作而不是查询该行,如果有的话。而在最坏的情况下,它存在的地方是,你执行两条语句而不是一条。我只是继续并发送删除语句,如果它不影响任何行(因为它们不存在),那就这样吧。

+0

此外,如果您需要知道删除是否会影响任何内容,则可以使用其他方法获取受影响的行数。 – deltab 2015-02-08 18:41:44

+0

True'dat,@deltab – Mureinik 2015-02-08 21:12:29