首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该用php检查唯一约束吗?

我应该用php检查唯一约束吗?
EN

Stack Overflow用户
提问于 2013-07-16 12:13:55
回答 4查看 1.5K关注 0票数 5

也许这个问题已经被问过了,但我真的不知道如何去寻找它:

我有postgres表的“客户”,每个客户都有自己独特的名字。为了实现这一点,我在本专栏中添加了一个唯一的约束。

我使用php访问表。

当用户现在试图创建一个新客户时,其名称已经被使用,数据库会显示"Integrity约束违反“,而php会抛出一个错误。

当这种情况发生时,我想要做的是在html输入字段中显示一个错误:“已取的客户名”。

我的问题是我该怎么做。

我应该捕获PDO-异常,检查错误代码是否“唯一违反”,而不是根据异常消息显示一条消息,还是应该在尝试插入新行之前使用附加语句检查重复的名称?

什么是更好的练习?做进一步的sql语句,或者捕获和分析错误代码.

编辑:--我正在使用事务,为了回滚,我捕获了任何异常。问题是,我是否应该过滤掉唯一的违规行为,这样就不会导致回滚。

EDIT2:如果我使用异常方法,则必须分析异常消息,以确保唯一约束确实属于"name"-column。

这就是我从例外中得到的一切:

代码语言:javascript
复制
["23505",7,"FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint <customers_name_unique>\nDETAIL: Schlüssel <(name)=(test)> existiert bereits."]

获取列信息的唯一方法是检查"customers_name_unique“是否存在(它是唯一约束的名称)。

但是您也可以看到,消息是德语的,因此输出取决于系统/可能会发生更改。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-16 12:19:01

这个问题不属于这里,但我会回答你的。

例外是一些特殊的事情发生的情况。这意味着你不应该用它们来处理可能经常发生的情况。如果你这么做,那就像后藤密码。更好的解决方案是预先检查是否有重复行。但是,异常情况下的解决方案更容易,因此您需要决定是想要工作还是想要按应该的方式编写一些工作。

票数 2
EN

Stack Overflow用户

发布于 2013-07-16 12:22:48

您应该捕获PDO异常。

让数据库失败比查找记录是否已经存在更快。

这也使得应用程序“不太清楚”数据库中的业务逻辑。当您告诉数据库有关真正是业务逻辑的唯一索引时,由于数据库正在处理特定的逻辑,最好在其他层(应用程序)跳过相同的检查。

另外,当数据库层处理异常时,您可以避免竞争条件。如果您的应用程序正在检查一致性,那么在第一个应用程序检查该记录是否可用之后,可能会有其他用户添加相同记录的风险。

票数 7
EN

Stack Overflow用户

发布于 2013-07-16 12:18:04

错误是坏的,我宁愿在添加之前检查名称是否不存在。那么,您仍然应该检查insert上是否有错误,以避免并发脚本试图插入相同名称的情况(在检查存在性和插入之间有一段时间,因为它不是事务)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17676234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档