Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL e PHP Inesperado T_Variable

PARAR


Inserir em um banco de dados diretamente do post é sempre uma má ideia. Esta é a razão pela qual o PHP está atualmente preso com aspas mágicas não intuitivas.

Você deve pelo menos estar usando mysql_real_escape_string() para escapar de seus dados. Por exemplo:
$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);

A razão pela qual você precisa fazer isso é baseada em segurança. Por exemplo, se algum mal-intencionado definir o campo de nome de usuário para '); DROP TABLE users; sem primeiro escapar de seus dados. Você acabaria executando cegamente a seguinte consulta:
INSERT INTO users VALUES (''); DROP TABLE users;

O que obviamente não vai acabar bem para sua aplicação.

Este é o mínimo você deveria estar fazendo.

Na realidade, você realmente deveria estar migrando para o MySQLi Que é uma interface MySQL muito mais moderna. Aqui está um exemplo
$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);

Você pode até usar o MySQL em um estilo procedural. Portanto, se a programação orientada a objetos ainda não estiver ao seu alcance, você não terá problemas com o MySQLi.

Espero que ajude.