1

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

"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

4 回答 4

8

primary是 SQL 中的保留关键字,这意味着您应该:

  • 重命名该列 - 将是一个好主意,以避免那种 od 情况
  • 或在该名称周围使用反引号

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

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


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

于 2010-02-28T19:40:29.573 回答
2

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

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

您还可以使用这个方便的保留字检查器

后续问题:
我想知道你得到的错误声明是谁写的,本质上是RTM?好笑。我将在下一次尝试中使用它。:)

于 2010-02-28T19:43:07.503 回答
1

Primary 是保留字。表定义是什么?

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

于 2010-02-28T19:36:30.770 回答
1

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

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

于 2010-02-28T19:37:21.050 回答