2017-05-02 9 views
0

で条件に基づいてレコードを削除します:は、私は私のデータベースに定義された以下のテーブルを持っている親テーブル

moderator (id, name) 

parent_object (id, moderator_id, parent_name) 

child_object (id, parent_id, child_name, quantity) 

私はIDに基づいて、子オブジェクトを削除したいです。

delete from child_object where id = 3; 

これは任意の司会者は、彼らが所有していないすべての子オブジェクトを更新することができますので、しかし、セキュリティホールがある:私は現在動作します。このようなものを持っています。 moderator_idが2の場合、parent_objectのmoderator_idが2の場合にのみこのレコードを削除できるように、このレコードを削除するにはどうすればよいですか?

+0

は、データベースに接続するための任意のサーバーサイド言語を使用していますか?このセキュリティチェックは、通常、サーバー側で実装されます。 – Silencer310

+0

@ Silencer310私はPHP(PDO)を使用しています。データベースサーバーに複数のリクエストを行う場合を除いて、サーバー側でどのように実装できるかわかりません。 – kojow7

+0

あなたは自分自身以外の子供を司会者が更新しないようにしたいのですが、それはあなたが質問を実行する前に司会者を知っているのではなく、司会者のIDですか? – Silencer310

答えて

1

あなたはINNER JOINを使用して、以下のソリューションを使用することができます。

DELETE c.* FROM child_object c 
    INNER JOIN parent_object p ON c.parent_id = p.id 
WHERE c.id = 3 AND p.moderator_id = 2 

デモ:http://sqlfiddle.com/#!9/7290b5/1/0

関連する問題