如何使用PDO检查用户名是否已存在?

时间:2015-08-19 00:15:10

标签: php pdo

我正在处理一个项目,我有insert.my表的脚本称为调查,字段是id,username,password,province。用户名设置为唯一键。插入过程工作正常,没有任何重复的条目,但当我尝试插入重复的条目总是显示我这个错误

  

SQLSTATE [23000]:完整性约束违规:1062重复条目'诈唬'用于密钥'用户名'

我知道这个错误意味着什么,我的问题是,如果用户名已经存在或我没有,我怎么能想要弹出提醒信息..

这是我的代码

class.user.php

 public function username($username){
 $stmt = $this->db->prepare("SELECT count(*) FROM tish_images WHERE username = :username");
 $stmt->execute(array($username));
 $number_of_rows = $result->fetchColumn();
 if($number_of_rows >= 1) {
     echo 'username does exist'; // or return so you get the value
 } else {
     echo 'username does not exist'; //also return?
 }
}
public function create($username,$password,$province)
{
try
{
  $stmt = $this->db->prepare("INSERT INTO tish_images(username,password,province) VALUES(:username, :password, :province)");
  $stmt->bindparam(":username",$username);
  $stmt->bindparam(":password",$password);
  $stmt->bindparam(":province",$province);
  $stmt->execute();
  return true;
}
catch(PDOException $e)
{
  echo $e->getMessage();  
  return false;
}
}

的index.php

<?php
include_once 'DB.php';

$username = isset($_GET['username']) ? $_GET['username'] : '';
$password = isset($_GET['password']) ? $_GET['password'] : '';
$province = isset($_GET['province']) ? $_GET['province'] : '';

if(isset($_FILES['files'])){
$id = $_GET['id'];
$username = $_POST['username'];
$password = $_POST['password'];
$province = $_POST['province'];

if($crud->upload($id,$FILE_NAME,$FILE_SIZE,$FILE_TYPE,$username,$password,$province))
{
    echo "<script type='text/javascript'>alert('Successfully Updated!');</script>";
}
else
{
    echo "<script type='text/javascript'>alert('Updating Failed!');</script>";
}

}
if(isset($_GET['id']))
    {
    $id = $_GET['id'];
    extract($crud->getID($id));
    }

2 个答案:

答案 0 :(得分:0)

检查用户名或电子邮件是否已存在。我在那里添加了电子邮件,因为这也很有用。您不希望两个用户具有相同的电子邮件地址。好吧,我不认为有必要。 :)

完整的代码已添加并且是最新的。

        $query_check_user_name = $this->db_connection->prepare('SELECT user_name, user_email FROM users WHERE user_name=:user_name OR user_email=:user_email');
        $query_check_user_name->bindValue(':user_name', $user_name, PDO::PARAM_STR);
        $query_check_user_name->bindValue(':user_email', $user_email, PDO::PARAM_STR);
        $query_check_user_name->execute();
        $result = $query_check_user_name->fetchAll();
        if ($result > 0) {
           echo "Someone with that username/email already exists.";
        } else {
           //Continue with proccessing the form
        }

OR

            $query_check_user_name = $this->db_connection->prepare('SELECT user_name, user_email FROM users WHERE user_name=:user_name OR user_email=:user_email');
        $query_check_user_name->bindValue(':user_name', $user_name, PDO::PARAM_STR);
        $query_check_user_name->bindValue(':user_email', $user_email, PDO::PARAM_STR);
        $query_check_user_name->execute();
        $result = $query_check_user_name->fetchAll();
        if ($result > 0) {
           return true;
        } else {
           return false;
        }

答案 1 :(得分:0)

在执行查询之前,您应该运行SELECT以查看用户名是否存在。

// count how many rows with user name exists
$checkUserStmt = $this->db->prepare("
    SELECT count(1) 
    FROM tish_images 
    WHERE username = :username
");
$checkUserStmt->execute(array(":username" => $username));

// fetch the count result
if ($checkUserStmt->fetchColumn() > 0) {
    // username already exists
} else {
    // username available 
} //if

一些注释。