Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL et PHP T_Variable inattendue

ARRÊTER

L'insertion dans une base de données directement à partir de la poste est toujours une mauvaise idée. C'est la raison pour laquelle PHP est actuellement bloqué avec les guillemets magiques très peu intuitifs.

Vous devriez au moins utiliser mysql_real_escape_string() pour échapper vos données. Par exemple :

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

La raison pour laquelle vous devez le faire est basée sur la sécurité. Par exemple, si certains malveillants définissent le champ du nom d'utilisateur sur '); DROP TABLE users; sans d'abord échapper vos données. Vous finiriez par exécuter aveuglément la requête suivante :

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

Ce qui bien sûr ne va pas bien se terminer pour votre application.

C'est le minimum vous devriez faire.

En réalité, vous devriez vraiment passer à MySQLi Qui est une interface MySQL beaucoup plus moderne.Voici un exemple

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

Vous pouvez même utiliser MySQL dans un style procédural. Donc, si la programmation orientée objet n'est pas encore à votre portée, vous n'aurez aucun problème avec MySQLi.

J'espère que ça aide.