上帝这太烦人了。我有一个带有收件箱,发件箱和对话视图的邮件系统。对话视图显示了特定用户发送和接收的消息,因为我只使用一个表用于消息(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 :(得分: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)
相反,那么?
答案 1 :(得分:0)
哇。
你准备好的陈述或没有准备好的陈述,你就是不能这样做
它是SQL语法,而不是PDO。
因此,只需使用2组不同的数据运行2个单独的查询。
顺便说一句,出于某种原因,你没有在查询中使用占位符 - 所以,你处于危险之中。