2012-07-10 98 views
1

好吧,所以我写了一个register.php脚本,当命令尝试执行时,我得到一个意外的T变量。 误差在MySQL和PHP意外的T_Variable

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

位于第15行我也有第二个错误在我的语法根据Dreamweaver中在第20行的

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

如果有人可以帮助将不胜感激。先谢谢你。

回答

3

STOP

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

您应该至少使用mysql_real_escape_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有关的问题。

希望有所帮助。

+0

好吧,现在我要离开你的mysql_real_escape_string;目前我仍然遇到你的错误以及调用未定义的函数mysql_connect,但我试图对它进行排序;我被告知,这是从我的PHP扩展不加载,所以只要我可以得到所有想出来的,然后我会很好去,并能够解决它应该正常工作。我修改了我的php.ini,所以现在我认为在我的apache配置中存在一个潜在的原因。迟早我会找到解决方案并发布给大家。非常感谢小费; SQL注入。对我来说是新的。 – 2012-07-10 20:49:17

+0

我想我找到了问题。我检查了CMD提示符里面的语法并运行apache -t它告诉我 – 2012-07-11 02:24:26

+0

是的,它听起来像是你没有安装MySQL模块(windows)或者没有使用MySQL(linux)编译PHP。正如我记得旧的MySQL模块不再与PHP捆绑在一起。您应该可以省去麻烦,只使用MySQLi模块。 – 2012-07-11 17:25:10

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

失去周围的变量:)

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

单引号删除引号..

1

使用本:

('".$_Post[username]."','".$_Post[sha_pass_hash]."','".$_Post[email]."','2') 
相关问题