0

此查询有效:

$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

l1_clubmsg 中确实存在“to”列

任何想法为什么会出错?谢谢

4

5 回答 5

5

TO是mysql中的保留字,所以如果想作为列名使用,需要像这样转义;

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

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

于 2012-08-31T20:32:02.653 回答
4

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

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

您可以将查询编写为:

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

对于关键字列表,您可以在这里查看

注意:通常尽量避免在查询中使用关键字。如果您使用,请确保使用反引号(`)将其转义

于 2012-08-31T20:32:40.973 回答
2

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

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

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

于 2012-08-31T20:32:19.023 回答
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)

反引号确保它被适当地解析。

于 2012-08-31T20:31:37.980 回答
1

您必须在 . 周围加上引号TO

于 2012-08-31T20:33:50.207 回答