MySQL - INSERT INTO 说我已经用'to'='$user 2'穿了语法


MySQL - INSERT INTO says I have worng syntax with 'to'='$user2'

$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'(

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

`to`='$affectuser'

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

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

您将'to'放在单引号之间。列名不加引号,也不在反引号之间加引号。单引号用于字符串。您无法更新字符串,因此SET 'to'='user'是一个错误。

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

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

To是一个保留字。逃脱它:

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