sql >> Databasteknik >  >> RDS >> Mysql

PHP:Infoga värden från formuläret i MySQL

Följande kod deklarerar bara en strängvariabel som innehåller en MySQL-fråga:

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

Den kör inte frågan. För att göra det måste du använda vissa funktioner men låt mig förklara något annat först.

LITA ALDRIG på ANVÄNDARINSTÄLLNING :Du bör aldrig lägga till användarinmatning (som formulärinmatning från $_GET eller $_POST ) direkt till din fråga. Någon kan försiktigt manipulera inmatningen på ett sådant sätt att den kan orsaka stor skada på din databas. Det kallas SQL Injection. Du kan läsa mer om det här

För att skydda ditt skript från en sådan attack måste du använd förberedda uttalanden. Mer om förberedda uttalanden här

Inkludera förberedda satser i din kod så här:

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

Lägg märke till hur ? används som platshållare för värdena. Därefter bör du förbereda satsen med mysqli_prepare :

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

Börja sedan binda indatavariablerna till den förberedda satsen:

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

Och slutligen utför de förberedda uttalandena. (Det är här själva infogningen sker)

$stmt->execute();

OBS Även om det inte ingår i frågan, råder jag dig starkt att aldrig lagra lösenord i klartext. Istället bör du använda password_hash för att lagra en hash av lösenordet



  1. MYSQL:VÄLJ metod - men visa inte dubbletter / GROUP eller DISTINCT?

  2. Rails i väntan på migrering i rake db:test:prepare

  3. SUBSTR och INSTR SQL Oracle

  4. De tio bästa anledningarna till att migrera från Oracle till PostgreSQL