2013-02-21 57 views
-1

上帝這是如此討厭。我有一個收件箱,發件箱和會話視圖的消息系統。會話視圖顯示了與特定用戶發送和接收的消息,並且由於我只使用一個表格作爲消息(sender_status/receiver_status來控制消息中涉及哪個用戶刪除了它,讀取它等)。準備語句中的「加倍」數組以填充重複的佔位符

我有旁的複選框我的名單,每一個消息,它工作正常,在我的查詢都爲收件箱和發件箱:

<input type="checkbox" name="message_delete[]" value="<?= $message['mid']; ?>"/> 

我需要將messageupdate應用到正確的狀態,當我嘗試在刪除對話視圖: 普通查詢即收件箱工作正常:

$questionmarks = str_repeat("?,", count($mid_array) - 1) . "?"; 
$st = $db->prepare("UPDATE messages SET sender_status = 'DELETED' WHERE mid IN ($questionmarks)"); 
      $st->execute($mid_array); 

對話查詢,不工作:在執行我本以爲這工作

$st = $db->prepare("UPDATE messages SET (receiver_status = 'DELETED' WHERE mid IN  ($questionmarks) AND to_user = '{$user_id}'), (sender_status = 'DELETED' WHERE mid IN ($questionmarks) AND from_user = '{$user_id}')"); 
      $st->execute(WHAT TO PUT HERE); 

我已經試過陣列($ mid_array,$ mid_array)。還有其他幾個有點愚蠢的解決方案,我無法工作。我可能在這裏錯過了一些簡單的功能,但沒有一個我曾經嘗試過的,所以我的問題。需要幫忙!!提前致謝。

+0

你的第二個查詢是完全無效的。你不能有多個這樣的'where'子句。 – 2013-02-21 15:22:31

回答

1

嘗試更多的東西一樣

UPDATE messages 
SET 
    receiver_status = 'DELETED', 
    sender_status = 'DELETED' 
WHERE mid IN ($questionmarks) AND ('$user_id' IN (to_user, from_user)) 

繞過多個where問題原始查詢。


SET 
    receiver_status = IF(to_user = '$user_id', 'DELETED', receiver_status), 
    sender_status = IF(from_user = '$user_id', 'DELETED', sender_status) 
WHERE mid IN ($questionmarks) 

代替呢?

+0

這裏的問題是,我接下來會將消息設置爲刪除當前未嘗試刪除消息的用戶,否? – HolyMackerel 2013-02-21 15:27:42

+0

請參閱編輯....... – 2013-02-21 15:29:55

+0

立即嘗試一下,我會在確認它有效時投票:P,如果是這樣 - 非常感謝! – HolyMackerel 2013-02-21 15:39:54

0

哇。
你只是不能做到這一點,與準備好的聲明或沒有。
它是SQL語法,而不是PDO。

因此,只需運行2個獨立的查詢和2個獨立的數據集。

順便說一下,由於某種原因,您的查詢中沒有使用佔位符 - 因此,您處於危險之中。

+0

是的,我正在使用佔位符... – HolyMackerel 2013-02-21 15:33:33