【问题标题】:mysql error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right [duplicate]mysql 错误 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的 [重复]
【发布时间】:2012-12-30 19:37:46
【问题描述】:

执行查询时总是出现这个错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“read =1 WHERE user_id_sender = 1 AND user_id_receiver = 33 AND OR user_id_sender”附近使用正确的语法

这是我的查询:

mysql_query("UPDATE messages SET read =1 WHERE user_id_sender = $user_id AND user_id_receiver = $user_id_partner AND read = 0 OR user_id_sender = $user_id_partner AND user_id_receiver = $user_id  AND read = 0  ") or die (mysql_error());

table(messages) 有这些列:

message_id(INT)(AI)
user_id_sender(INT)
user_id_receiver(INT)
message(TEXT)
read(INT)

我真的不知道为什么会这样,我已经查看了网络,但我似乎无法为我的确切问题找到答案。也许有人可以帮助我。

【问题讨论】:

    标签: php mysql sql-update


    【解决方案1】:

    READreserved word

    始终将数据库、表和列名包含在反引号中以防止此类冲突:

    UPDATE `messages` SET `read`=1 WHERE `user_id_sender`=$user_id AND...
    

    【讨论】:

    • 避免在列名中使用保留字可能是个好主意。
    • @RayPaseur 为什么,当它作为一个名字有意义的时候?
    • 谢谢!它解决了这个问题。我会记住这一点。
    • @Kolink:因为它导致了额外的调试周期,正如这里所证明的那样。选择 my_read 之类的名称也可能有意义,但可以避免这种麻烦。
    • @RayPaseur 这也会使代码更加神秘。反引号的存在是有原因的。你是说仅仅因为 PHP 识别 $str = barestring; 我们不应该使用引号,而是一个一个地定义每个单词?
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多