我一直在这一行收到错误1064:这个php脚本有什么问题?
$sqlquery = "INSERT INTO user
(username, password, email, key)
VALUES
('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."','".$activation."')";`
我一直在这一行收到错误1064:这个php脚本有什么问题?
$sqlquery = "INSERT INTO user
(username, password, email, key)
VALUES
('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."','".$activation."')";`
key
是您在查询中使用的保留字,必须使用反引号将其转义。保留字错误是1064.
您还应该考虑学习一些安全理论,特别是关于在查询中使用非转义值(直接来自用户)。
下面的代码是安全和固定:
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
$sqlquery = "INSERT INTO `user` (`username`, `password`, `email`, `key`) VALUES ('{$username}','{$password}','{$email}','{$activation}')";
一个简单的规则,当谈到查询(嗯,什么事)是永远不要相信用户的输入。通过使用mysql_real_escape_string
,您正在转义变量,以便它们可以安全地插入到数据库中。没有它,你可以允许用户运行他们想要的任何查询。
为了将来的参考,这里是一个complete list of MySQL Reserved Words。
MySQL错误1064通常意味着SQL语法错误。看看你的SQL语句,以确保它是有效的。
调试这些类型错误的好方法是打印出SQL,然后尝试在MySQL中手动执行它。
尝试围绕每个变量$var
与mysql_real_escape_string()
,如
代替$_POST["password"]
使用mysql_real_escape_string($_POST["password"])
!
这不是主要 – 2011-05-06 14:37:42
@rudi我会说这是查询的主要问题之一 – kapa 2011-05-06 14:48:25
直接从HTTP请求中获取用户定义的值并将它们连接成一个SQL查询是B-A-D,并且可能是您的语法错误的来源。确保你逃脱所有的价值。
做,如果你使用这个,而不是你仍然得到错误:
$query = sprintf("INSERT INTO user
(username, password, email, `key`)
VALUES
('%s','%s','%s','%s')",
mysql_real_escape_string($_POST["username"]),
mysql_real_escape_string($_POST["password"]),
mysql_real_escape_string($_POST["email"]),
mysql_real_escape_string($_POST["activation"]));
$result = mysql_query($query);
KEY is a MySQL reserved word - 它需要用反引号逃脱其在查询中使用。反引号是没有必要的,如果不使用保留字...
我想你应该阅读这个:http://en.wikipedia.org/wiki/SQL_injection – jantimon 2011-05-06 14:33:55
请详细说明你的意思 – Urinprobe 2011-05-06 14:34:54
'回声是什么结果? $ sqlquery;' – Ikke 2011-05-06 14:35:31