这个php脚本有什么问题?

时间:2011-05-06 14:31:34

标签: php mysql sql mysql-error-1064

我在这一行中不断收到错误1064:

$sqlquery = "INSERT INTO user 
               (username, password, email, key) 
             VALUES 
                ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."','".$activation."')";`

5 个答案:

答案 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,您可以转义变量,以便它们可以安全地插入数据库。没有它,您可以允许用户运行他们想要的任何查询。

以下是complete list of MySQL Reserved Words

以供日后参考

答案 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 ,可能是语法错误的来源。确保你逃避所有价值观。