В принципе, я хочу, чтобы мой код был в безопасности от SQL Injection. Я читал онлайн, что mysqli_real_escape_string
небезопасен для SQL-инъекций и читает, что параметризация - это путь. Поэтому из приведенного ниже кода я могу добавлять учетные записи в базу данных, но я не могу проверить, существует ли учетная запись.Попытка параметризовать запрос SELECT
<?php
require 'privstuff/dbinfo.php';
$firstname = $_POST["firstname"];
$password1 = $_POST["password1"];
$email = $_POST["email"];
$ip = $_SERVER['REMOTE_ADDR'];
$username = $_POST["username"];
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);
if(mysqli_connect_errno()) {
echo "Connection Failed. Please send an email to [email protected] regarding this problem.";
exit();
}
//$username = mysqli_real_escape_string($mysqli,$_POST['username']);
//$result = mysqli_query($mysqli,"SELECT `username` FROM `accounts` WHERE username = '$username'");
if ($stmt = $mysqli->prepare("SELECT `username` FROM `accounts` WHERE username = ?")) {
$stmt -> bind_param("s", $username);
$stmt -> execute();
$stmt -> bind_result($result);
$stmt -> fetch();
$stmt -> close();
}
if(mysqli_num_rows($result)>0){
header('Location: /register.html');
}else{
if ($stmt = $mysqli->prepare("INSERT INTO `accounts`(`firstname`, `username`, `password`, `email`, `ip`) VALUES (?,?,?,?,?)")) {
$stmt -> bind_param("sssss", $firstname, $username, password_hash($password1, PASSWORD_BCRYPT), $email, $ip);
$stmt -> execute();
$stmt -> bind_result($result);
$stmt -> fetch();
$stmt -> close();
}
$mysqli->close();
header('Location: /login.html');
}
?>
Поскольку вопрос находится на удержании, и я не могу добавить свой собственный ответ. Кто-то из Reddit дал фантастическое объяснение этому вопросу. Here it is
Что вы говорите, имеет смысл. Но я немного смущен тем, где положить остальную часть моей, которая уже находится внутри 'if ($ stmt-> num_rows> 0)' – DanMossa
@ Dgameman1 i пересмотрены некоторые части, надеюсь, это пролить немного света. – Ghost
. страницу входа, но он не добавляет их в базу данных. Даже если пользователь существует или нет. – DanMossa