php - 电子邮件或用户名的拆分错误消息已存在

标签 php mysqli

我不知道如何获取针对电子邮件和用户名已存在的 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/

相关文章:

php - 切换到 ColdFusion?

php - 搜索数据库中的冒犯性词语

php - getJson 不适用于虚拟主机

javascript - PHP jQuery :Convert HTML to JSON from given url and create a tree view of html elements

php - 将 MySQL 连接传递给函数

php - 计算mysql中的所有原始值

php - 是否可以使用 simplexml 将注释标记插入到 xml 中?

php - PHP中将mysql查询结果保存到HTML文件

php - 使用单引号搜索 MySql 全文索引

php - Google map 文档使用已弃用的 PHP - 我该如何更新它?