MySQL和PHP意外的T_Variable


MySQL and PHP Unexpected T_Variable

好的,所以我写了一个register.php脚本,当命令试图执行时,我得到了一个意外的T变量。错误位于的第15行

('$_Post[username]','$_Post[sha_pass_hash]','$_Post[email]','2')";

根据Dreamweaver在的第20行,我的语法中还有第二个错误

    die('Error: ' . mysql_error());

如果有人能帮忙,我们将不胜感激。提前谢谢。

STOP

直接从帖子中插入数据库总是一个坏主意。这就是PHP目前使用非常不直观的魔术引号的原因。

您至少应该使用mysql_real_eescape_string()来转义数据。例如:

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

你必须这样做的原因是基于安全的。例如,如果某些恶意程序在未对数据进行转义的情况下将用户名字段设置为'); DROP TABLE users;。您最终会盲目地运行以下查询:

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

当然,这对你的申请来说不会有好结果。

这是您应该执行的最低

事实上,你真的应该转向MySQLi,这是一个更现代的MySQL接口。以下是的示例

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

您甚至可以在过程化风格中使用MySQL。因此,如果面向对象编程还不在您的范围内,那么MySQLi就不会有任何问题。

希望能有所帮助。

($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')";

删除引号。。

($_POST["username"],$_POST["sha_pass_hash"],$_POST["email"],'2')";

丢失变量周围的单引号:)

($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')";

使用这个:

('".$_Post[username]."','".$_Post[sha_pass_hash]."','".$_Post[email]."','2')