2011-12-13 72 views
2

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

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

我正确吗?

回答

4

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

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

  2. 它使得向用户报告有用/友好的错误消息变得更容易。有时可能有足够的解析数据库错误来产生有用的错误消息,但大多数数据库错误对最终用户来说看起来不是很友好。最好尽可能靠近用户生成错误。

现在,即使有这样的,它仍然是件好事,将检查您的数据库,但他们应该作为最后度假,当你的DB抛出一个错误,它应该被视为一个错误行动,而不是“数据验证功能”。换句话说,如果您遇到数据库异常,则表示您的PHP代码为损坏的

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

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

+0

所以这听起来像你应该只依靠数据库来验证数据作为最后的手段,以防万一通过你的代码。 – Obto

+0

@Obto:是的,我认为这是一个很好的总结。 – Flimzy

+0

你允许你的数据库做什么验证?我想不出任何理由我会**让我的数据库'验证'某件事或我将如何处理它。 – JM4

1

100%不正确。

在你更新之前,它是一个好的实践,甚至值得验证,或者 插入一条记录到像MySQL这样的数据库?

它不仅是'好'的做法,它是基本逻辑。根本不使用MySQL进行检查。 PHP会根据您设置的规则进行验证。如果这些规则并不意味着某些标准,那就抛出一个错误。

+0

举一个工作示例这一点,我有一个应用程序,其中的任何“公共”的项目必须有一个唯一的标识符,该项目可能会“编辑”,但完全相同的副本必须在数据库中的意义被保留当“编辑”发生标识符被复制并且标志被添加到旧项目。为了确保数据的正确性,我需要使用PHP,就像我使用mySQL的独特字段一样,那么不能发生更多复制功能的“编辑”功能。 PHP验证还允许您提供友好且高度自定义的响应。希望这有助于上下文。 – Ryan

相关问题