O código a seguir apenas declara uma variável string que contém uma consulta MySQL:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Ele não executa a consulta. Para fazer isso, você precisa usar algumas funções, mas deixe-me explicar outra coisa primeiro.
NUNCA CONFIE NA ENTRADA DO USUÁRIO :Você nunca deve anexar entrada do usuário (como entrada de formulário de
$_GET
ou $_POST
) diretamente à sua consulta. Alguém pode manipular cuidadosamente a entrada de forma que possa causar grandes danos ao seu banco de dados. Isso é chamado de injeção de SQL. Você pode ler mais sobre isso aqui
Para proteger seu script de tal ataque, você deve usar Declarações Preparadas. Mais sobre declarações preparadas aqui
Inclua instruções preparadas em seu código como esta:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Observe como o
?
são usados como espaços reservados para os valores. Em seguida, você deve preparar a instrução usando mysqli_prepare
:$stmt = $mysqli->prepare($sql);
Em seguida, comece a vincular as variáveis de entrada à instrução preparada:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
E finalmente execute as instruções preparadas. (É aqui que a inserção real ocorre)
$stmt->execute();
OBSERVAÇÃO Embora não seja parte da questão, aconselho fortemente que você nunca armazene senhas em texto não criptografado. Em vez disso, você deve usar
password_hash
para armazenar um hash da senha