Мой код работает, если я хочу вставить в базу данных, но моя проверка того, существует ли пользователь, не работает.
* Я думал, что идея состояла в том, чтобы проверить, существует ли строка с этим именем пользователя, если это не добавляет этого пользователя в базу данных, иначе
$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(); }
Для выполнения запроса вы смешали Procedural style
и Object oriented style
.
Когда используешь,
1) Процедурный стиль
$result = mysqli_query($mysqli, "Your Query");
используйте это, $row_count = mysqli_num_rows($result);
2) Объектно-ориентированный стиль
$result = $mysqli->query("Your Query");
Используйте это, $row_count = $result->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