【问题标题】:MySQL - INSERT INTO says I have worng syntax with 'to'='$user2' [duplicate]MySQL - INSERT INTO 说我已经使用 'to'='$user2' [重复]
【发布时间】:2012-08-24 02:54:09
【问题描述】:
$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')

【问题讨论】:

  • 这可能无助于回答您的问题,但您应该停止使用mysql_* 函数。它们正在被弃用。请改用PDO(PHP 5.1 起支持)或mysqli(PHP 4.1 起支持)。如果您不确定使用哪一个,read this article

标签: php mysql chat


【解决方案1】:

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

`to`='$affectuser'

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

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

【讨论】:

  • 请注意,在这种特定情况下,TO 必须用反引号引起来,因为它是a reserved keyword
  • @MichaelBerkowski 是的,我应该在答案中这么说。那是我一开始就对它感兴趣的。并进行了编辑以包含更全面的答案。
【解决方案2】:

To 是保留字。逃脱它:

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

【讨论】:

    【解决方案3】:

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

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

    更新:cmets 说 to 是保留字,应始终转义 - 使用反引号。

    【讨论】:

    • TO 也是保留字。必须用反引号引用。
    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 2014-03-22
    • 2015-09-21
    • 2011-01-22
    • 2010-10-26
    • 2012-05-21
    • 2010-10-28
    • 2021-11-19
    相关资源
    最近更新 更多