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

MySQL e PHP T_Variable imprevisto

FERMATI

L'inserimento in un database direttamente dalla posta è sempre una cattiva idea. Questo è il motivo per cui PHP è attualmente bloccato con le virgolette magiche molto poco intuitive.

Dovresti almeno usare mysql_real_escape_string() per sfuggire ai tuoi dati. Ad esempio:

$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);

Il motivo per cui devi farlo è basato sulla sicurezza. Ad esempio se qualche malintenzionato imposta il campo del nome utente su '); DROP TABLE users; senza prima sfuggire ai tuoi dati. Finiresti per eseguire alla cieca la seguente query:

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

Che ovviamente non andrà a buon fine per la tua applicazione.

Questo è il minimo dovresti fare.

In realtà dovresti davvero passare a MySQLi Che è un'interfaccia MySQL molto più moderna. Ecco un esempio

$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);

Puoi persino usare MySQL in uno stile procedurale. Quindi, se la programmazione orientata agli oggetti non è ancora alla tua portata, non avrai problemi con MySQLi.

Spero di esserti stato d'aiuto.