检查是否已经有用户,然后将其插入数据库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”?如果您想回答我可以接受的问题,欢迎使用堆栈溢出!请不要把你的源代码扔在这里。对你的答案要和蔼可亲,尽量给它一个很好的描述,这样其他人就会喜欢它并投赞成票。见: