gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:50:31 26 4
gpt4 key购买 nike

也许这个问题已经被问过了,但我真的不知道如何搜索:

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

我使用 php 访问该表。

当用户现在尝试创建一个新客户时,其名称已被占用,数据库显示“Integrity Constraint Violation”,并且 php 抛出错误。

我想做的是在发生这种情况时在 html-input-field 中显示错误:“Customer-Name already taken”。

我的问题是我应该怎么做。

我应该捕获 PDO 异常,检查错误代码是否为“UNIQUE VIOLATION”,然后根据异常消息显示消息,或者我是否应该在尝试之前使用附加语句检查重复名称插入新行?

什么是更好的做法?进行进一步的 sql 语句,或捕获和分析错误代码。

编辑:我正在使用事务,我正在捕获任何异常以便回滚。问题是,我是否应该过滤掉 Unique-violations,以免它们导致回滚。

编辑 2:如果我使用异常方法,我将不得不分析异常消息以确保唯一约束确实属于“名称”列。

这是我从异常中得到的一切:

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

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

但正如您还看到的那样,该消息是德语的,因此输出取决于系统/可能会发生变化。

最佳答案

您应该捕获 PDO 异常。

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

这也使得应用程序“不太了解”数据库中的业务逻辑。当您将唯一索引告诉数据库时,它实际上是一个业务逻辑,并且由于数据库正在处理该特定逻辑,因此最好跳过其他层(应用程序)中的相同检查。

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

关于php - 我应该用 php 检查唯一约束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17676234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com