检查是否重复

vsnjm48y  于 2021-06-15  发布在  Mysql
关注(0)|答案(4)|浏览(345)

我想看看 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");
    }

标准差

qyuhtwio

qyuhtwio1#

如果你想检查 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");
    }
}
uemypmqf

uemypmqf2#

SELECT * FROM users WHERE username = $username

如果发现显示错误,则插入

jyztefdp

jyztefdp3#

<?php
     $getUniqueUsername=$con->query("select * from user where name='$user_name");
     $rowCount=$getUniqueUsername->num_rows;

     if($rowCount) {          
          $insertQuery=$con->query("insert into table_name (field_name) Values('".$values."'));
     }
?>
vcudknz3

vcudknz34#

两种解决方案:
您可以使username字段唯一,这样,如果您尝试插入一行现有用户名,mysql将抛出一个错误。

$sql = "INSERT INTO users (username,password,role) values(?, ?, ?)";
$q = $pdo->prepare($sql);
$result = $q->execute(array($username,$password,$role));
if(!$result) {
    // print out your error message
}

否则,使用所需的用户名进行选择,并查看是否返回(=已使用)行(=可用)。

$sql = "SELECT COUNT(*) as count FROM users WHERE username = ?";
$q = $pdo->prepare($sql);
$q->execute(array($username));
$result = $q->fetchAll();
// test result, if 1 > print error, etc

相关问题