【问题标题】:SQL row update +1SQL 行更新 +1
【发布时间】:2018-06-15 08:36:49
【问题描述】:

我正在尝试在自定义行中添加 +1。示例:

UPDATE `users` SET `MVP` = `MVP` + 1 WHERE `steam_id` = `%s`;

但什么都没有。怎么了?我认为语法看起来不错。

【问题讨论】:

  • 可能在哪里出现问题

标签: php mysql insert


【解决方案1】:

%s 是一个值,所以删除 `

你通常可以在任何地方省略它,除非你使用了一些“倒霉”的列名

UPDATE `users` SET `MVP` = `MVP` + 1 WHERE `steam_id` = %s;

【讨论】:

  • 值得注意的是,“倒霉的列名”是指reserved keywords,例如'update'或'where'。
  • @JustCarty 和一些糟糕的标点符号选择
  • @Strawberry 是在挖我评论中可怕的标点符号还是一般的 SQL 经验? ;)
  • @JustCarty 没有挖掘。尽管标点符号永远不应包含在表/列名称中,但反引号允许这样做。
【解决方案2】:

把 ' 从你正在增加的 MVP 中拿走。

UPDATE `users` SET `MVP` = MVP+1 WHERE `steam_id` = `%s`;

【讨论】:

  • 那为什么不去掉所有的反引号呢?
  • @u_mulder ... 公平评论,我只是专注于有问题的位
  • 我应该添加一个警告,上面写着“如果这不起作用,那么查询查找它尝试更新的实体时会出现问题”,@Rok D 已经正确发现,我没有
【解决方案3】:

发布整个代码被剪断。真的不能像那样帮助你。 steam_id 是什么? %s 是什么。你什么时候用实际值替换它?您还应该只使用准备好的语句而不是 DYI。 %s 不是它们在 PDO 或 MYSQLI 中的样子,但确实看起来像一个字符串的占位符。

您还将此标记为插入,但您正在进行更新。

那些`` 有点不必要,从未将它们用于列/表名称,但似乎至少在 mysql 控制台中有效。

截断的 sql 看起来是正确的,假设 MPV 是数字并且 id 是字符串/varchar 并且等于 %s,或者您正在用某些东西替换它。

编辑:正如一些人所说的 %s 是问题,如果它是一个 int 则什么都不用。如果是字符串,请使用单引号或双引号。而且您不需要在其他任何地方使用任何东西,但如果您愿意,您可以这样做。

【讨论】:

    猜你喜欢
    • 2013-05-26
    • 2016-12-05
    • 2019-11-24
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多