2016-03-05 55 views
0

我有這個類用戶,裏面有一個名爲deleteFriend的方法。這使用一個使用PDO的查詢來刪除數據庫表中的一行。如果我更改查詢中的值,回顯結果保持不變

​​

正如您所見,此方法稱爲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排。其中有6個爲user_id和另一個5.與其他行有5 friend_id和其他6

enter image description here

當這些方法都使用這些值來看,他們都返回即使1.引用接受0的行的方法不會刪除,接受1的方法不會刪除。我的猜測是,$ stmt-> execute()對於已接受0的方法返回true。但是爲什麼?它不符合查詢的標準,因爲接受不= = 1.這些函數按照它們應該的方式工作,並且對於我來說,如果它返回1或2,它就不重要,因爲最終結果是相同的(僅它刪除正確的行接受1),但我很好奇這是什麼原因。如果任何人都能對此有所瞭解,我會非常感激。如果我對問題的解釋令人困惑,我們深表歉意。我很困惑自己。 :-(

+0

*我的猜測是$ stmt-> execute()正在返回*您不必在這裏猜測,只需查看手冊它返回的內容然後您就會看到它 – Rizier123

+0

I知道它返回true。我已經檢查過曼努埃爾它在曼努埃爾說:「成功返回真,失敗失敗。」我的問題是爲什麼它返回真實?因爲當查詢不正確時這應該返回false。它沒有可接受的值1,所以它應該失敗。 – Niall

回答

1

PDOStatement::execute()回報true當查詢成功。如果你DELETE,且行的WHERE條款相符,那麼你已經成功刪除零行。

PDOStatement::execute()只返回false如果發生一些干擾查詢的執行

+0

謝謝。這就是我想知道的。你的回答非常明確,並得到很好的解釋。我會在一分鐘內接受它。 – Niall

+0

只需添加到此。我編輯了我的代碼來包含如果($ stmt-> rowCount()> 0){0} { return 1; } else { return 2; }我在$ stmt-> execute() – Niall

+0

之後添加了它,它應該可以工作。 –