sql >> Databáze >  >> RDS >> Mysql

PHP:Vkládání hodnot z formuláře do MySQL

Následující kód pouze deklaruje řetězcovou proměnnou, která obsahuje dotaz MySQL:

$sql = "INSERT INTO users (username, password, email)
    VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";

Dotaz neprovede. Chcete-li to provést, musíte použít některé funkce, ale nejprve mi dovolte vysvětlit něco jiného.

NIKDY NEVĚŘTE VSTUPU UŽIVATELE :Nikdy byste neměli přidávat uživatelský vstup (jako je formulářový vstup z $_GET nebo $_POST ) přímo na váš dotaz. Někdo může opatrně manipulovat se vstupem takovým způsobem, že může způsobit velké poškození vaší databáze. Říká se tomu SQL Injection. Více si o tom můžete přečíst zde

Abyste ochránili svůj skript před takovým útokem, musíte použijte připravené výpisy. Více o připravených výpisech zde

Zahrňte do kódu připravené příkazy takto:

$sql = "INSERT INTO users (username, password, email)
    VALUES (?,?,?)";

Všimněte si, jak ? se používají jako zástupné symboly pro hodnoty. Dále byste měli připravit příkaz pomocí mysqli_prepare :

$stmt = $mysqli->prepare($sql);

Poté začněte vázat vstupní proměnné na připravený příkaz:

$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);

A nakonec proveďte připravená prohlášení. (Tady probíhá skutečné vkládání)

$stmt->execute();

POZNÁMKA Ačkoli to není součástí otázky, důrazně vám doporučuji, abyste nikdy neukládali hesla jako prostý text. Místo toho byste měli použít password_hash pro uložení hash hesla



  1. PHP krátké generování jedinečného ID pomocí auto_increment?

  2. Jak používat připravené výpisy s Postgres

  3. hromadná aktualizace dekadické hodnoty tabulky mysql a změna typu pole sloupce

  4. Zpracování transakcí v MySQL