2017-05-02 292 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