$smt->get_result() 在 MySQL 之后给出空结果(仅)INSERT
$smt->get_result() gives empty result after MySQL (only) INSERT
我正在 PHP 中进行用户注册,我正在尝试检查是否实际创建了 INSERT
之后的用户帐户。我究竟做错了什么? $dataR
变量 returns 没有,所以每次注册后,都会创建帐户,但脚本仍然 returns “抱歉,您的注册失败。请返回重试。 “
感谢回复,欢迎提问!
连接:
$this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
Register.php:
$username = $this->db_connection->real_escape_string(strip_tags($_POST['username'], ENT_QUOTES));
$useremail = $this->db_connection->real_escape_string(strip_tags($_POST['email'], ENT_QUOTES));
$password = $_POST['password_new'];
$options = [
'cost' => 10,
];
$salt = $this->random_str(64);
$salted_password = $password . $salt;
$password_hash = password_hash($salted_password, PASSWORD_BCRYPT, $options);
$query = $this->db_connection->prepare("SELECT name, mail FROM users WHERE name = ? OR mail = ?");
$query->bind_param('ss', $username, $useremail);
$query->execute();
$results = $query->get_result(); // this works fine
if($results->num_rows == 1) {
$row = $results->fetch_object();
if($username == $row->name) {
$this->errors[] = "This username is already taken!";
} elseif($useremail == $row->mail) {
$this->errors[] = "This email address is already taken!";
} else {
$this->errors[] = "This username / email address is already taken.";
}
} else {
$SIS = new SnowflakeIdService;
$snowflakeID = $SIS->CreateSnowflakeID();
$sql = $this->db_connection->prepare("INSERT INTO users (snowflake, name, salt, hash, mail) VALUES (?, ?, ?, ?, ?)");
$sql->bind_param("issss", $snowflakeID, $username, $salt, $password_hash, $useremail);
$sql->execute();
$dataR = $sql->get_result(); // this not
if($dataR) {
$this->messages[] = "Your account has been created successfully. You can now log in.";
} else {
$this->errors[] = "Sorry, your registration failed. Please go back and try again.";
}
}
我把$dataR = $sql->get_result();
改成了$dataR = $sql->affected_rows;
,所以最后的代码是这样的:
$sql = $this->db_connection->prepare("INSERT INTO users (snowflake, name, salt, hash, mail) VALUES (?, ?, ?, ?, ?)");
$sql->bind_param("issss", $snowflakeID, $username, $salt, $password_hash, $useremail);
$sql->execute();
$dataR = $sql->affected_rows;
if($dataR > 0) {
$this->messages[] = "Your account has been created successfully. You can now log in.";
} else {
$this->errors[] = "Sorry, your registration failed. Please go back and try again.";
}
我正在 PHP 中进行用户注册,我正在尝试检查是否实际创建了 INSERT
之后的用户帐户。我究竟做错了什么? $dataR
变量 returns 没有,所以每次注册后,都会创建帐户,但脚本仍然 returns “抱歉,您的注册失败。请返回重试。 “
感谢回复,欢迎提问!
连接:
$this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
Register.php:
$username = $this->db_connection->real_escape_string(strip_tags($_POST['username'], ENT_QUOTES));
$useremail = $this->db_connection->real_escape_string(strip_tags($_POST['email'], ENT_QUOTES));
$password = $_POST['password_new'];
$options = [
'cost' => 10,
];
$salt = $this->random_str(64);
$salted_password = $password . $salt;
$password_hash = password_hash($salted_password, PASSWORD_BCRYPT, $options);
$query = $this->db_connection->prepare("SELECT name, mail FROM users WHERE name = ? OR mail = ?");
$query->bind_param('ss', $username, $useremail);
$query->execute();
$results = $query->get_result(); // this works fine
if($results->num_rows == 1) {
$row = $results->fetch_object();
if($username == $row->name) {
$this->errors[] = "This username is already taken!";
} elseif($useremail == $row->mail) {
$this->errors[] = "This email address is already taken!";
} else {
$this->errors[] = "This username / email address is already taken.";
}
} else {
$SIS = new SnowflakeIdService;
$snowflakeID = $SIS->CreateSnowflakeID();
$sql = $this->db_connection->prepare("INSERT INTO users (snowflake, name, salt, hash, mail) VALUES (?, ?, ?, ?, ?)");
$sql->bind_param("issss", $snowflakeID, $username, $salt, $password_hash, $useremail);
$sql->execute();
$dataR = $sql->get_result(); // this not
if($dataR) {
$this->messages[] = "Your account has been created successfully. You can now log in.";
} else {
$this->errors[] = "Sorry, your registration failed. Please go back and try again.";
}
}
我把$dataR = $sql->get_result();
改成了$dataR = $sql->affected_rows;
,所以最后的代码是这样的:
$sql = $this->db_connection->prepare("INSERT INTO users (snowflake, name, salt, hash, mail) VALUES (?, ?, ?, ?, ?)");
$sql->bind_param("issss", $snowflakeID, $username, $salt, $password_hash, $useremail);
$sql->execute();
$dataR = $sql->affected_rows;
if($dataR > 0) {
$this->messages[] = "Your account has been created successfully. You can now log in.";
} else {
$this->errors[] = "Sorry, your registration failed. Please go back and try again.";
}