好吧,所以我写了一个register.php脚本,当命令尝试执行时,我得到一个意外的T变量。 误差在MySQL和PHP意外的T_Variable
('$_Post[username]','$_Post[sha_pass_hash]','$_Post[email]','2')";
位于第15行我也有第二个错误在我的语法根据Dreamweaver中在第20行的
die('Error: ' . mysql_error());
如果有人可以帮助将不胜感激。先谢谢你。
好吧,所以我写了一个register.php脚本,当命令尝试执行时,我得到一个意外的T变量。 误差在MySQL和PHP意外的T_Variable
('$_Post[username]','$_Post[sha_pass_hash]','$_Post[email]','2')";
位于第15行我也有第二个错误在我的语法根据Dreamweaver中在第20行的
die('Error: ' . mysql_error());
如果有人可以帮助将不胜感激。先谢谢你。
直接从帖子插入数据库总是一个坏主意。这就是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有关的问题。
希望有所帮助。
($_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')
好吧,现在我要离开你的mysql_real_escape_string;目前我仍然遇到你的错误以及调用未定义的函数mysql_connect,但我试图对它进行排序;我被告知,这是从我的PHP扩展不加载,所以只要我可以得到所有想出来的,然后我会很好去,并能够解决它应该正常工作。我修改了我的php.ini,所以现在我认为在我的apache配置中存在一个潜在的原因。迟早我会找到解决方案并发布给大家。非常感谢小费; SQL注入。对我来说是新的。 – 2012-07-10 20:49:17
我想我找到了问题。我检查了CMD提示符里面的语法并运行apache -t它告诉我 – 2012-07-11 02:24:26
是的,它听起来像是你没有安装MySQL模块(windows)或者没有使用MySQL(linux)编译PHP。正如我记得旧的MySQL模块不再与PHP捆绑在一起。您应该可以省去麻烦,只使用MySQLi模块。 – 2012-07-11 17:25:10