-1

神様、これはとても迷惑です。受信トレイ、送信トレイ、および会話ビューを備えたメッセージ システムがあります。会話ビューには、特定のユーザーとの送信メッセージと受信メッセージの両方が表示されます。メッセージには 1 つのテーブルしか使用していないため (sender_status/receiver_status を使用して、メッセージに関与するユーザーのうち、削除したり、読んだりしたユーザーを制御します)。

リストの横にチェックボックスがあり、メッセージごとに 1 つあり、受信トレイと送信トレイの両方のクエリで正常に機能します。

<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 );

うまくいくと思った実行で array($mid_array, $mid_array) を試しました。また、私がうまくいかない他のいくつかのややばかげた解決策。ここでいくつかの簡単な機能が欠けている可能性がありますが、私が試したもののどれも機能しなかったため、私の質問です。助けが必要!!前もって感謝します。

4

2 に答える 2

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)

代わりに?

于 2013-02-21T15:26:29.343 に答える
0

うわあ。
準備されたステートメントの有無にかかわらず、それを行うことはできません。
PDO ではなく、SQL 構文です。

したがって、2 つの別個のデータ セットを使用して 2 つの別個のクエリを実行するだけです。

ところで、何らかの理由で、クエリでプレースホルダーを使用していないため、危険にさらされています。

于 2013-02-21T15:30:44.400 に答える