【问题标题】:Check if already a user then insert into the database php检查是否已经是用户然后插入数据库 php
【发布时间】:2015-10-14 15:40:43
【问题描述】:

如果我想插入数据库,我的代码可以工作,但是我检查用户是否已经存在不起作用。

*我认为这个想法是检查该用户名是否已存在一行,如果存在则不要将该用户添加到数据库中,否则

$email = $_POST['email'];
$password= password_hash($_POST['password'], PASSWORD_BCRYPT, $options);
$username= $_POST['username'];

$result = mysqli_query($mysqli, "SELECT username FROM users WHERE username = '$username'");
$row_count = $result->num_rows;
if($row_count == 1){
    echo'User exists';
}else{
$query = "INSERT INTO users (username, email, password) VALUES(?, ?, ?)";
$statement = $mysqli->prepare($query);

//bind parameters for markers, where (s = string, i = integer, d = double,  b = blob)
$statement->bind_param('sss', $username, $email, $password);

if($statement->execute()){
     print 'Success! ID of last inserted record is : ' .$statement->insert_id .'<br />'; 
}else{
     die('Error : ('. $mysqli->errno .') '. $mysqli->error);
}
$statement->close();
}

【问题讨论】:

  • 你可以在users.usernameON DUPLICATE KEY UPDATE上放一个UNIQUE索引
  • 对不起,我不明白你的意思,如果你是这个意思,每个用户名旁边都有一个 user_Id pk
  • 如果您将UNIQUE 索引添加到users.username,您实际上不需要先检查它是否存在,您可以尝试执行INSERT - 通常它会失败如果您尝试使用已经存在的唯一键插入数据,则会出现错误...但是,您可以使用 ON DUPLICATE KEY UPDATE 语法来更新现有记录,而不是尝试创建新记录,请参阅:dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html跨度>
  • 完美运行,有没有办法输出“用户已存在”而不是显示重复键的消息?
  • 另外如果你想回答我可以接受的问题

标签: php mysqli registration


【解决方案1】:

您已混合使用 Procedural styleObject oriented style 来执行查询。

使用时,

1) 程序风格

$result = mysqli_query($mysqli, "Your Query");

使用这个,$row_count = mysqli_num_rows($result);

2)面向对象的风格

$result = $mysqli->query("Your Query");

使用这个,$row_count = $result-&gt;num_rows;

所以,根据您的代码,您使用的是面向对象的样式。所以,你需要改变

$result = mysqli_query($mysqli,"SELECT username FROM users WHERE username = '$username'");

$result = $mysqli->query("SELECT username FROM users WHERE username = '$username'");

编辑的代码。

$email = $_POST['email'];
$password= password_hash($_POST['password'], PASSWORD_BCRYPT, $options);
$username= $_POST['username'];

$result = $mysqli->query("SELECT username FROM users WHERE username = '$username'");
$row_count = $result->num_rows;
if($row_count == 1)
{
    echo 'User exists';
}
else
{
    $query = "INSERT INTO users (username, email, password) VALUES(?, ?, ?)";
    $statement = $mysqli->prepare($query);

    //bind parameters for markers, where (s = string, i = integer, d = double,  b = blob)
    $statement->bind_param('sss', $username, $email, $password);

    if($statement->execute())
    {
         print 'Success! ID of last inserted record is : ' .$statement->insert_id .'<br />'; 
    }
    else
    {
         die('Error : ('. $mysqli->errno .') '. $mysqli->error);
    }
    $statement->close();
}

欲了解更多信息,请查看mysqli_num_rows vs ->num_rows

【讨论】:

    【解决方案2】:
    $db = ("SELECT username FROM userlist WHERE username='$username'");
    $query = $conn->query($db);
    if(mysqli_fetch_array($query) > 0 ) { //check if there is already an entry for that username
        echo "Username already exists!";
    }
    

    【讨论】:

    • 欢迎来到 Stack Overflow!请不要把你的源代码扔在这里。友善一点,并尝试对您的答案进行漂亮的描述,以便其他人会喜欢并支持它。见:How do I write a good answer?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2020-01-21
    相关资源
    最近更新 更多