首页 > 解决方案 > 检查这是否重复

问题描述

我想检查是否username已经存在,如果存在则抛出错误消息,任何提示我该怎么做?我已经尝试搜索但只找到mysql_errno但它对我不起作用。

  if ($valid) {
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        //$password = md5($password);
        $sql = "INSERT INTO users (username,password,role) values(?, ?, ?)";
        $q = $pdo->prepare($sql);
        $q->execute(array($username,$password,$role));
        Database::disconnect();
        header("Location: index.php");
    }

sd

标签: phpmysql

解决方案


如果要检查是否username已使用:

SELECT * FROM users WHERE username = :username

如果你返回一行:你抛出你的错误,否则你做你的INSERT

所以你的代码应该是这样的:

if ($valid) {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql_check = "SELECT * FROM users WHERE username = :username";
    $test = $pdo->prepare($sql_check);
    $test->bindParam(':username', $username); 
    $test->execute;

现在这里有两个解决方案来检查你是否有一行:

    if($test->rowCount() > 0) {
        // error
    }      

或者

    $user = $test->fetch();

    if (!empty($user)) {
        // error
    }

现在,如果您没有错误,请插入:

    else {
        //$password = md5($password);
        $sql = "INSERT INTO users (username,password,role) values(?, ?, ?)";
        $q = $pdo->prepare($sql);
        $q->execute(array($username,$password,$role));
        Database::disconnect();
        header("Location: index.php");
    }
}

推荐阅读