在插入/更新之前验证数据还是否?

时间:2011-12-13 01:21:01

标签: php mysql database

如果您在数据库(例如MySQL)中有正确定义的检查和断言,在更新或将记录插入像MySQL之类的数据库之前,这是一种好的做法,甚至值得验证数据吗?

从我看到的情况来看,只要您必须执行的检查并不复杂并且可以由DB本身完成,那么首先验证数据是错误的......首先是PHP,然后是MySQL。

我对此是否正确?

2 个答案:

答案 0 :(得分:4)

作为一般规则,您应该尽快进行验证。在这种情况下,这意味着在您的PHP代码中。为什么呢?

  1. 效率更高。为什么如果它只是响应错误,为什么要将数据发送到数据库(可能是通过网络,甚至是在不同的国家)?最好先避免错误。

  2. 这样可以更轻松地向用户报告有用/友好的错误消息。有时可能会充分解析数据库错误以生成有用的错误消息,但大多数数据库错误对最终用户来说看起来并不友好。最好尽可能靠近用户生成错误。

  3. 现在,即使这样,在数据库中进行检查仍然很好,但它们应该充当最后的手段,当您的数据库抛出错误时,它应被视为 bug ,而不是“数据验证功能”。换句话说,如果您遇到数据库异常,则表明您的PHP代码已损坏

    例外:最近有一次我选择违反这一原则,因为有一些相当复杂的验证是必要的。我选择依靠DB进行“完整”验证(但确保我的异常文本很容易被解析,因此仍然可以生成用户友好的错误)。我仍然让我的客户端代码做基本的输入验证,但由于完整验证涉及的复杂性,我不想要维护两个功能相同的代码位(一个在客户端软件中,一个在DB中) )。我觉得在两个地方拥有相同的功能更有可能导致未来的错误,如果一个更新而另一个没有。在这种情况下,服务器端验证代码是一个长达4页的PL / Perl存储过程,它充当INPUT / UPDATE触发器。

    结论:您几乎不应该依赖数据库进行用户验证。我能想到的唯一例外与您所询问的相反:真正复杂的检查;不是那么简单的。

答案 1 :(得分:1)

100%不正确。

  

在更新或更新之前,这是一种良好的做法,甚至值得验证   将记录插入像MySQL这样的数据库中吗?

它不仅是'好'的实践,它是基本的逻辑。您根本不会使用MySQL进行检查。 PHP会根据您设置的规则进行验证。如果这些规则不是某些标准,则抛出错误。