sql >> Database teknologi >  >> RDS >> Mysql

PHP:Indsættelse af værdier fra formularen i MySQL

Følgende kode erklærer bare en strengvariabel, der indeholder en MySQL-forespørgsel:

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

Den udfører ikke forespørgslen. For at gøre det skal du bruge nogle funktioner, men lad mig først forklare noget andet.

STIL ALDRIG TIL BRUGERINDTAG :Du bør aldrig tilføje brugerinput (såsom formularinput fra $_GET eller $_POST ) direkte til din forespørgsel. Nogen kan omhyggeligt manipulere inputtet på en sådan måde, at det kan forårsage stor skade på din database. Det kaldes SQL Injection. Du kan læse mere om det her

For at beskytte dit script mod et sådant angreb skal du brug Udarbejdede Udsagn. Mere om forberedte erklæringer her

Inkluder forberedte udsagn til din kode som denne:

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

Læg mærke til, hvordan ? bruges som pladsholdere for værdierne. Dernæst skal du forberede sætningen ved hjælp af mysqli_prepare :

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

Begynd derefter at binde inputvariablerne til den forberedte sætning:

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

Og til sidst udføre de forberedte udsagn. (Det er her selve indsættelsen finder sted)

$stmt->execute();

BEMÆRK Selvom det ikke er en del af spørgsmålet, råder jeg dig kraftigt til aldrig at gemme adgangskoder i klartekst. I stedet skal du bruge password_hash for at gemme en hash af adgangskoden



  1. Hvorfor ydre rækkefølge ved ikke fungerer korrekt?

  2. Postgres:Brug af tidsstempler til paginering

  3. GAE Python - Intet modul ved navn MySQLdb

  4. Importer en CSV-fil til SQL Server ved hjælp af SqlBulkCopy