我不知道如何获取针对电子邮件和用户名已存在的 2 条单独的错误消息。我希望它给出确切的错误,所以如果电子邮件已经存在,它只会说“电子邮件已存在,请选择另一个!”而不是“用户名或电子邮件已存在,请选择另一个!”
if ($stmt = $con->prepare('SELECT id, password FROM accounts WHERE username = ? OR email = ?')) {
$stmt->bind_param('ss', $_POST['username'], $_POST['email']);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
// Username already exists
echo 'Username or email already exists, please choose another!';
} else {
// Insert the new account
..
最佳答案
首先,如果您想检查数据库中是否存在某行,则无需获取数据,只需获取 COUNT(*)
即可。然而,就您的情况而言,这实际上使您向您想要实现的目标迈进了一步。
$stmt = $con->prepare('SELECT username, email FROM accounts WHERE username = ? OR email = ?');
$stmt->bind_param('ss', $_POST['username'], $_POST['email']);
$stmt->execute();
$result = $stmt->get_result();
if ($row = $result->fetch_assoc()) {
if ($row['username'] === $_POST['username']) {
// Username already exists
echo 'Username already exists, please choose another!';
} elseif ($row['email'] === $_POST['email']) {
// Email already exists
echo 'Email already exists, please choose another!';
}
}
顺便说一句,请不要将 prepare()
方法调用包装在 if
语句中。您应该启用正确的错误报告。 How to get the error message in MySQLi?
如果您想将此代码转换为 PDO,那就是另一回事了。您不能混合使用这两个 API。
关于php - 电子邮件或用户名的拆分错误消息已存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61689407/