gpt4 book ai didi

php - 如果在字段中找到指定值,则拒绝 PDO MySQL 语句?

转载 作者:行者123 更新时间:2023-11-29 13:14:45 26 4
gpt4 key购买 nike

我已经在谷歌上搜索过,但运气不佳,所以也许SO可以提供帮助。我正在为几个项目开发一个用户身份验证系统,需要确保电子邮件地址(也是用户名)是唯一的。

我在 MySQL 查询中将该字段设置为唯一,但我需要一种方法来取消 SQL 查询,并在提供的电子邮件与现有记录匹配时通知用户“指定的电子邮件已在使用中”。

我可以在插入之前执行选择查询,但我想知道是否有一种方法可以编写 SQL 查询,以便在电子邮件或类似内容中 IF NOT EXISTSexisting@example.com 时执行插入。

然后,如果未执行插入,我需要知道,并且需要能够将其与另一个错误区分开来。

这可能吗?怎么办?

最佳答案

如果你使用PDO,你可以捕获异常并检查状态代码,例如

// make sure you're set to throw exceptions
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare('INSERT INTO `user` (`email`) VALUES (?)');
try {
$stmt->execute([$email]);
} catch (PDOException $e) {
$errorInfo = $stmt->errorInfo(); // apparently PDOException#getCode() is pretty useless
if ($errorInfo[1] == 1586) {
// inform user, throw a different exception, etc
} else {
throw $e; // a different error, let this exception carry on
}
}

参见http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html#error_er_dup_entry_with_key_name

如果使用 MySQLi,该过程将类似

$stmt = $mysqli->prepare('INSERT INTO `user` (`email`) VALUES (?)');
$stmt->bind_param('s', $email);
if (!$stmt->execute()) {
if ($stmt->errno == 1586) {
// inform user, throw a different exception, etc
} else {
throw new Exception($stmt->error, $stmt->errno);
}
}

关于php - 如果在字段中找到指定值,则拒绝 PDO MySQL 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21618194/

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