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

MySQL i PHP Nieoczekiwana zmienna T_Variable

ZATRZYMAJ

Wstawianie do bazy danych bezpośrednio z postu to zawsze zły pomysł. To jest powód, dla którego PHP obecnie utknął z bardzo nieintuicyjnymi magicznymi cytatami.

Powinieneś przynajmniej używać mysql_real_escape_string() do ucieczki danych. Na przykład:

$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());

$query = "INSERT INTO users VALUES (
    '" . mysql_real_escape_string($_POST["username"]) . "',
    '" . mysql_real_escape_string($_POST["sha_pass_hash"]) . "',
    '" . mysql_real_escape_string($_POST["email"]) . "',
    '2'
)";

mysql_query($query);

Powodem, dla którego musisz to zrobić, jest bezpieczeństwo. Na przykład, jeśli jakiś złośliwy ustawi pole nazwy użytkownika na '); DROP TABLE users; bez wcześniejszej ucieczki Twoich danych. Skończyłbyś na ślepo uruchamiając następujące zapytanie:

INSERT INTO users VALUES (''); DROP TABLE users;

Co oczywiście nie zakończy się dobrze dla Twojej aplikacji.

To jest minimum powinieneś robić.

W rzeczywistości powinieneś przejść do MySQLi Który jest znacznie bardziej nowoczesnym interfejsem MySQL. Oto przykład

$mysqli = new mysqli('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database');

$query = "INSERT INTO users VALUES (
    '" . $mysqli->real_escape_string($_POST["username"]) . "',
    '" . $mysqli->real_escape_string($_POST["sha_pass_hash"]) . "',
    '" . $mysqli->real_escape_string($_POST["email"]) . "',
    '2'
)";

$mysqli->query($query);

Możesz nawet używać MySQL w stylu proceduralnym. Więc jeśli programowanie obiektowe nie jest jeszcze w Twoim zasięgu, nie będziesz miał problemów z MySQLi.

Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak korzystać z pola z podzapytania w MySQL?

  2. Błąd JQUERY i php post 500 (błąd wewnętrzny serwera)

  3. Wydajność MySQL — klauzula IN a równanie (=) dla pojedynczej wartości

  4. Jak dodać skrypt startowy do kontenera docker mysql?

  5. Konwertowanie wartości ujemnych z FROM_UNIXTIME