检查是否已经有用户,然后将其插入数据库php

检查是否已经有用户,然后将其插入数据库php,php,mysqli,registration,Php,Mysqli,Registration,如果我希望插入到数据库中,我的代码可以工作,但是检查用户是否已经存在无法工作 *我认为这样做的目的是检查是否有一行已经存在该用户名,如果已经存在,请不要将该用户添加到数据库中,否则 $email = $_POST['email']; $password= password_hash($_POST['password'], PASSWORD_BCRYPT, $options); $username= $_POST['username']; $result = mysqli_query($mysq

如果我希望插入到数据库中,我的代码可以工作,但是检查用户是否已经存在无法工作

*我认为这样做的目的是检查是否有一行已经存在该用户名,如果已经存在,请不要将该用户添加到数据库中,否则

$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();
}
$email=$\u POST['email'];
$password=password\u散列($\u POST['password'],password\u BCRYPT,$options);
$username=$_POST['username'];
$result=mysqli_查询($mysqli,“从username='$username'的用户中选择用户名”);
$row\u count=$result->num\u行;
如果($row\u count==1){
echo“用户存在”;
}否则{
$query=“插入用户(用户名、电子邮件、密码)值(?、、?)”;
$statement=$mysqli->prepare($query);
//标记的绑定参数,其中(s=string,i=integer,d=double,b=blob)
$statement->bind_param('sss',$username,$email,$password);
如果($statement->execute()){
打印“成功!上次插入记录的ID为:”。$statement->insert_ID。“
”; }否则{ die('Error:('.$mysqli->errno')'.$mysqli->Error); } $statement->close(); }
为了执行查询,您混合了
过程风格
面向对象风格

使用时

1)程序风格

$result = mysqli_query($mysqli, "Your Query");
$result = $mysqli->query("Your Query");
使用这个,
$row\u count=mysqli\u num\u rows($result)

2)面向对象风格

$result = mysqli_query($mysqli, "Your Query");
$result = $mysqli->query("Your Query");
使用此选项,
$row\u count=$result->num\u rows

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

$result = mysqli_query($mysqli,"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();
}
$email=$\u POST['email'];
$password=password\u散列($\u POST['password'],password\u BCRYPT,$options);
$username=$_POST['username'];
$result=$mysqli->query(“从username='$username'的用户中选择用户名”);
$row\u count=$result->num\u行;
如果($row\u count==1)
{
echo“用户存在”;
}
其他的
{
$query=“插入用户(用户名、电子邮件、密码)值(?、、?)”;
$statement=$mysqli->prepare($query);
//标记的绑定参数,其中(s=string,i=integer,d=double,b=blob)
$statement->bind_param('sss',$username,$email,$password);
如果($statement->execute())
{
打印“成功!上次插入记录的ID为:”。$statement->insert_ID。“
”; } 其他的 { die('Error:('.$mysqli->errno')'.$mysqli->Error); } $statement->close(); }

有关更多信息,请检查此

您可以在
用户上放置
唯一的
索引。用户名
重复密钥更新
对不起,我不明白您的意思,每个用户名旁边都有一个用户Id pk,如果这是您的意思,那么如果您向
用户添加
唯一的
索引。用户名
您实际上不需要先检查它是否存在,您只需尝试执行
插入操作
——通常,如果您尝试使用已存在的唯一密钥插入数据,则插入操作将失败并出错。。。但是,您可以使用
ON DUPLICATE KEY UPDATE
语法来更新现有记录,而不是尝试创建新记录,请参阅:工作正常,是否有方法输出“User ready exists”而不是消息“DUPLICATE KEY”?如果您想回答我可以接受的问题,欢迎使用堆栈溢出!请不要把你的源代码扔在这里。对你的答案要和蔼可亲,尽量给它一个很好的描述,这样其他人就会喜欢它并投赞成票。见: