准备好的声明中“加倍”数组以填充重复的占位符

时间:2013-02-21 15:16:43

标签: php mysql prepared-statement

上帝这太烦人了。我有一个带有收件箱,发件箱和对话视图的邮件系统。对话视图显示了特定用户发送和接收的消息,因为我只使用一个表用于消息(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),我认为这样可行。还有一些其他有点愚蠢的解决方案我无法工作。我可能在这里错过了一些简单的功能,但我尝试过的都没有,所以我的问题。需要帮忙!!提前谢谢。

2 个答案:

答案 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个单独的查询。

顺便说一句,出于某种原因,你没有在查询中使用占位符 - 所以,你处于危险之中。