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