MySQL语法错误; “查看与您的MySQL服务器版本对应的手册..”

时间:2010-02-28 19:34:38

标签: php sql mysql mysql-error-1064

我一直在互联网上寻找以下错误的解决方案;

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'primary, username, password, password2) VALUES (null, 'hello', 'hello', 'hello')' at line 1"

我不知道发生了什么......我知道你会问我的代码是什么:

$con = mysql_connect("localhost","root","*****");
    if (!$con)
      {
      die('Server overload, please try again' . mysql_error());
      }

    mysql_select_db("users", $con);

    $sql = "INSERT INTO details (primary, username, password, password2) VALUES (null, '$_POST[username]', '$_POST[password]', '$_POST[password2]')";

    if (!mysql_query($sql,$con))
      {
      die('Error: Server overload, try again' . mysql_error());
      }
    echo "You have signed up successfully!";

    mysql_close($con);

我一直试图弄清楚大约4/5小时,但没有成功。
谢谢,
劳伦斯

4 个答案:

答案 0 :(得分:7)

在SQL中,

primaryreserved keyword,这意味着您应该:

  • 重命名该列 - 这是一个好主意,以避免这种情况
  • 或使用反复名称

这是第二种情况下查询的样子:

INSERT INTO details (`primary`, `username`, `password`, `password2`)
VALUES (null, 'hello', 'hello', 'hello')


注意:您应该使用mysql_real_escape_string来转义您的值,以避免SQL Injections

答案 1 :(得分:2)

尽量不要使用相对常见的名称(如主要和详细信息)来命名表或列。

虽然它们可能不是您当前使用的SQL风格的保留字,但您永远不知道何时可能支持其他类型(Postgres,Oracle等)。

你也可以使用这个方便的花花公子reserved word checker

  
    

后续问题:
    我想知道是谁写了你得到的错误陈述,基本上是 RTM ?热闹。我将在下一次尝试中使用它。 :)

  

答案 2 :(得分:1)

主要是保留字。表定义是什么?

http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

答案 3 :(得分:1)

我将第一列重命名为其他内容:“primary”是MySQL中的保留字:

http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html