Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP:Wstawianie wartości z formularza do MySQL

Poniższy kod po prostu deklaruje zmienną łańcuchową, która zawiera zapytanie MySQL:

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

Nie wykonuje zapytania. Aby to zrobić, musisz użyć kilku funkcji, ale najpierw wyjaśnię coś innego.

NIGDY NIE UFAJ WPROWADZANIU UŻYTKOWNIKA :Nigdy nie należy dołączać danych wejściowych użytkownika (takich jak dane wejściowe formularza z $_GET lub $_POST ) bezpośrednio na Twoje zapytanie. Ktoś może ostrożnie manipulować danymi wejściowymi w taki sposób, aby spowodować duże szkody w Twojej bazie danych. Nazywa się to wstrzykiwaniem SQL. Więcej na ten temat możesz przeczytać tutaj

Aby chronić swój skrypt przed takim atakiem, musisz użyj przygotowanych oświadczeń. Więcej o przygotowanych wyciągach tutaj

Dołącz przygotowane oświadczenia do swojego kodu w następujący sposób:

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

Zauważ, jak ? są używane jako symbole zastępcze dla wartości. Następnie powinieneś przygotować oświadczenie za pomocą mysqli_prepare :

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

Następnie rozpocznij wiązanie zmiennych wejściowych z przygotowaną instrukcją:

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

I na koniec wykonaj przygotowane instrukcje. (Tutaj ma miejsce faktyczne wstawianie)

$stmt->execute();

UWAGA Chociaż nie jest to część pytania, zdecydowanie radzę, aby nigdy nie przechowywać haseł w postaci zwykłego tekstu. Zamiast tego powinieneś użyć password_hash przechowywać skrót hasła



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktualizacja tabeli na PK i innym polu w MySQL jest sporadycznie powolna

  2. Błąd krytyczny:Nieprzechwycony wyjątek „mysqli_sql_exception” z komunikatem „W zapytaniu/przygotowanej instrukcji nie użyto indeksu”

  3. mysql dołączanie do tabel bez kluczy

  4. Biblioteka MySQL-db dla Pythona 3.x?

  5. Wstaw MySQL do z jednej bazy danych w innej