gpt4 book ai didi

php - Postgresql 更新唯一列并在更新前验证

转载 作者:行者123 更新时间:2023-11-29 13:28:27 25 4
gpt4 key购买 nike

场景:管理员用户在数据库上插入一个新客户端,它有 3 个唯一列、postgres id、驾驶执照之类的东西和一封电子邮件,稍后我试图允许管理员用户更新这些字段但是当我运行验证时当然它返回 false,因为它们已经存在,我 read this question是同样的问题,但我没有运行 symfony 或任何其他 PHP 框架,我想我可以尝试在查询中发送 id 并检查 id 和电子邮件,但由于是实时验证,我只是发送输入值.

解决方案 1:不允许管理员用户更新这些字段并让他删除客户端并创建一个新客户端(这很容易逃脱)。

解决方案 2?我无法思考任何逻辑,我该如何构建查询来验证此问题?

类似于:

SELECT email FROM users.users WHERE email=$email AND id != $id ???

问题是我不知道如何在输入字段中发送 ID...这是我的验证码:

email: {
trigger: 'blur',
message: 'El email no es válido',
validators: {
remote: {
message: 'Ya existe un usuario con ese email',
url: 'actions/chk_available.php',
data: {
type: 'email'
},
type: 'POST'
}
}
},

当管理员用户离开该字段时,此代码在服务器端运行。

更新

假设我有 2 行:

  1. 邮箱:aaa@host.com
  2. 邮箱:bbb@host.com

    SELECT COUNT (1) FROM users.users_web WHERE email=$email

如果管理员用户正在更新第二行并且没有触及电子邮件,那么一切都很好,如果他使用与第 1 行相同的值更新电子邮件(aaa@host.com)该查询验证为有效,因为仍然是计数 1 并且更新将结束填充 2 个相同的电子邮件,但 postgresql 不允许,因为它是一个独特的字段,所以这就是它变得困惑的地方。

最佳答案

不要费心尝试“预验证”唯一约束。只需写入数据库并捕获违规行为。它更快,更正确。无论如何,尝试“预验证”是一种竞争条件。

示例:http://sqlfiddle.com/#!15/5f4a0/1

关于php - Postgresql 更新唯一列并在更新前验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29090145/

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