也许这个问题已经被问过了,但我真的不知道如何搜索它:
我有 postgres 表“客户”,每个客户都有自己唯一的名称。为了实现这一点,我在此列中添加了唯一约束。
我用 php 访问表。
当用户现在尝试创建一个名称已被占用的新客户时,数据库会显示“Integrity Constraint Violation”,并且 php 会抛出一个错误。
我想要做的是在发生这种情况时在 html-input-field: "Customer-Name already taken" 中显示一个错误。
我的问题是我应该怎么做。
我应该捕获 PDO 异常,检查错误代码是否为“UNIQUE VIOLATION”,然后根据异常消息显示一条消息,还是应该在尝试插入之前使用附加语句检查重复名称新行?
什么是更好的做法?进行进一步的 sql 语句,或捕获和分析错误代码。
编辑: 我正在使用事务,并且我正在捕获任何异常以回滚。问题是,如果我应该过滤掉唯一违规,这样它们就不会导致回滚。
EDIT2: 如果我使用异常方法,我将不得不分析异常消息以确保唯一约束确实属于“名称”列。
这是我从异常中得到的一切:
["23505",7,"FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint <customers_name_unique>\nDETAIL: Schlüssel <(name)=(test)> existiert bereits."]
获取有关该列的信息的唯一方法是检查“customers_name_unique”是否存在(它是唯一约束的名称)。
但是你也可以看到,消息是德语的,所以输出取决于系统/可能会改变。