我在这一行中不断收到错误1064:
$sqlquery = "INSERT INTO user
(username, password, email, key)
VALUES
('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."','".$activation."')";`
答案 0 :(得分:12)
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
,您可以转义变量,以便它们可以安全地插入数据库。没有它,您可以允许用户运行他们想要的任何查询。
答案 1 :(得分:2)
MySQL错误1064通常表示SQL语法错误。看看你的SQL语句,确保它是有效的。
调试这些错误的好方法是打印出SQL,然后尝试在MySQL中手动执行它。
答案 2 :(得分:1)
尝试使用$var
围绕每个变量mysql_real_escape_string()
,例如
而不是$_POST["password"]
使用mysql_real_escape_string($_POST["password"])
!
答案 3 :(得分:1)
如果你使用它,你仍会得到错误:
$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 - 它需要用反引号括起来以避免在查询中使用它。如果不使用保留字,则不需要反引号...
答案 4 :(得分:0)
直接从HTTP请求获取用户定义的值并将它们连接成SQL查询 B-A-D ,可能是语法错误的来源。确保你逃避所有价值观。