0
$time=date("G:i:s j.n.Y");
$wholetime="$time";
mysql_query("INSERT INTO rivase_chat_posts SET sender='$user', content='$msg', time='$wholetime', 'to'='$affectuser'");
$msg="";

我正在做私人聊天。那是我的代码。它导致此错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''to'='gs'' 附近使用正确的语法
($user="gskartwii", $msg="HI", $affectuser='gs' )

4

3 回答 3

9

对于列名,使用反引号而不是单引号:

`to`='$affectuser'

单引号仅用于字符串。反引号(通常在键盘上数字 1 的左侧)是 mysql 中用于列名或表名的东西。

编辑:正如 Michael Berkowski 正确指出的那样,您必须为列名执行此操作的原因是因为to它是 mysql 中的保留字 - 这是一种可爱的说法,它是 mysql 认为在 a 中表示某些东西的特殊词正常查询。在那一点上,将保留字用作表格中的列确实可能不是最好的主意 - 您必须在使用它们的每个实例中反引号。您可能需要考虑将其重命名为类似这样toUser的名称,这可能会使您的项目的其余部分更容易 SQL 输出:)

于 2012-08-29T13:18:50.293 回答
2

你把'to'单引号之间。列名没有被引用,或者在反引号之间。单引号用于字符串。您不能更新字符串,因此SET 'to'='user'是错误的。

INSERT INTO rivase_chat_posts 
SET `sender`='$user', `content`='$msg', `time`='$wholetime', `to`='$affectuser'

更新:评论说to是一个保留字,应该总是转义 - 使用反引号。

于 2012-08-29T13:18:38.353 回答
2

To是保留字。逃脱它:

INSERT INTO rivase_chat_posts 
SET sender='$user', content='$msg', time='$wholetime', `to` ='$affectuser'
于 2012-08-29T13:19:49.820 回答