【问题标题】:How to INSERT and UPDATE with PDO in one query?如何在一个查询中使用 PDO 插入和更新?
【发布时间】:2015-01-22 17:01:47
【问题描述】:

我有以下 INSERT sn-p 可以正常工作:

        $sql = "INSERT INTO `rating`(`business_id`, `user_id`, `quality`, `service`, `value`) VALUES (?,?,?,?,?)";
        $query = $dbh->prepare($sql);
        $query->bindParam(1, $business_id, PDO::PARAM_STR, 255);
        $query->bindParam(2, $user_id, PDO::PARAM_STR, 255);
        $query->bindParam(3, $quality, PDO::PARAM_STR, 255);
        $query->bindParam(4, $service, PDO::PARAM_STR, 255);
        $query->bindParam(5, $value, PDO::PARAM_STR, 255);
        $query->execute();

但是,如果插入成功,我想更新另一个表。

我以为这样就可以了:

if ($stmt->execute()) {
        $sql      = "UPDATE users SET prestige = prestige + 5";
        $query    = $dbh->prepare($sql);
        $query->execute();
        }

但没有运气,谁能指出我正确的方向?

有效的最终代码:

        if ($query->execute()) {
            $sql      = "UPDATE user SET prestige = prestige + 250
            WHERE id = {$user_id}";
            $query = $dbh->query($sql);
        }

【问题讨论】:

  • if ($query->execute()) { 替换 $query->execute(); 应该这样做。不过,您将需要一个 WHERE 子句。否则,这将更新您的所有行。加上$query = $dbh->query($sql);
  • 没有参数就不用prepare直接执行
  • @Mihai 是的,你是对的,我现在才发现。 OP 只需要做$query = $dbh->query($sql);
  • @Mihai OP 没有回应,所以也许他们出去给我们请了午餐。如果您愿意给出答案,请成为我的客人;-) 您基本上已经确定了节奏。

标签: php mysql pdo insert


【解决方案1】:
if ($stmt->execute()) {
        $sql      = "UPDATE users SET prestige = prestige + 5";
        $query = $dbh->query($sql);

        }

只需使用查询,因为您不需要准备好的语句。

【讨论】:

  • 我对我将在 foreach 部分中包含的内容有点困惑...:/
  • @potts 哎呀有更新。
  • 谢谢。我已经用有效的最终答案更新了原始帖子:-)
【解决方案2】:

execute 成功时返回 TRUE,失败时返回 FALSE。所以这段代码必须有效。我认为你的问题是'if ($stmt->execute())' 你应该检查'if ($query->execute())'

    $sql = "INSERT INTO `rating`(`business_id`, `user_id`, `quality`, `service`, `value`) VALUES (?,?,?,?,?)";
    $query = $dbh->prepare($sql);
    $query->bindParam(1, $business_id, PDO::PARAM_STR, 255);
    $query->bindParam(2, $user_id, PDO::PARAM_STR, 255);
    $query->bindParam(3, $quality, PDO::PARAM_STR, 255);
    $query->bindParam(4, $service, PDO::PARAM_STR, 255);
    $query->bindParam(5, $value, PDO::PARAM_STR, 255);

    if ($query->execute()) {
        $sql      = "UPDATE users SET prestige = prestige + 5";
        $query    = $dbh->prepare($sql);
        $query->execute();
    }

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2014-02-09
    • 2017-09-24
    • 1970-01-01
    • 2018-05-12
    • 2012-04-21
    相关资源
    最近更新 更多