为什么我的查询适用于3列但是4或更多失败?

时间:2012-08-31 20:27:39

标签: php sql

此查询有效:

$con = mysql_connect("localhost","root","pw");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("db", $con);

$sql="INSERT INTO l1_clubmsg (msg, subject, status)
VALUES
(1,1,1)";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);

但是当我改变时:

$sql="INSERT INTO l1_clubmsg (msg, subject, status)
VALUES
(1,1,1)";

要:

$sql="INSERT INTO l1_clubmsg (msg, subject, status, to)
VALUES
(1,1,1,1)";

我收到此错误:

Error: 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 'to) VALUES (1,1,1,1)' at line 1

'to'列确实存在于l1_clubmsg

为什么会出现错误?谢谢

5 个答案:

答案 0 :(得分:5)

TO是mysql中的保留字,因此如果要将其用作列名,则需要将其转义为;

INSERT INTO l1_clubmsg (msg, subject, status, `to`) VALUES (1,1,1,1)

通常最好转义所有列和表名,因为较新版本的数据库可能有新的保留字,但在这种情况下只需要一个。

答案 1 :(得分:4)

这不是因为产生错误的4列或更多列。

产生错误是因为to是一个关键字,不能像这样使用。

您可以将查询编写为:

$sql="INSERT INTO l1_clubmsg (msg, subject, status, `to`)
VALUES
(1,1,1,1)";

对于您可以查看的关键字列表here

注意:通常会尝试避免查询中的关键字。如果你使用,请确保使用反引号(`)

来逃避它

答案 2 :(得分:2)

TO是MySQL中的保留字。您将不得不在查询中转义它。尝试

$sql="INSERT INTO l1_clubmsg (msg, subject, status, `to`)
VALUES
(1,1,1,1)";

我添加的标点符号被称为反引号。

答案 3 :(得分:1)

我怀疑to是MySQL中的保留工作 - 您需要确保MySQL正确解释为列名。而不是:

INSERT INTO l1_clubmsg (msg, subject, status, to)
VALUES
(1,1,1,1)

尝试:

INSERT INTO l1_clubmsg (`msg`, `subject`, `status`, `to`)
VALUES
(1,1,1,1)

反引号确保它被正确解析。

答案 4 :(得分:1)

您必须在TO附近加上引号。