我想在删除它之前检查一行是否存在。我表格中的行不存在但总是返回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。
答案 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语句,如果它不影响任何行(因为它们不存在),那就这样吧。