【问题标题】:PHP mysql query is executing twicePHP mysql查询正在执行两次
【发布时间】:2012-01-26 13:26:14
【问题描述】:

我有这个 PHP 脚本:

$q = $dbc -> prepare("
    UPDATE accounts 
    SET motivation = motivation-10 
    WHERE id = ?
");

$q -> execute(array($user['id']));

但它是减去 20 而不是 10。当我在 mysql 中运行查询时,它只减去十。为什么?

【问题讨论】:

  • 请输入更多信息,我怀疑你的 PHP 上只有这个?页面,因为没有 PHP 标记以及 $dbc 从未初始化等。所以多一点上下文会很好。您如何调用脚本等。
  • 您必须拥有更多,因为此代码不会设置 PDO 对象或连接...
  • 是的,我有,但这是合而为一的要求吗?里面什么都没有?
  • 您的脚本运行了两次,即使您只调用了一次。查看您的网络日志,您可能会看到每个页面加载的两个请求。可能是重写规则造成的。
  • 我曾经遇到过与此非常相似的问题,在对着我的电脑大喊大叫之后,结果发现我将图像标签的 src 属性留空,这导致 PHP页面在每次页面加载时被调用两次。

标签: php mysql pdo prepared-statement


【解决方案1】:

您的 $q -> 执行方法正在做一些愚蠢的事情!检查它或

可能是循环或

您对此有多个请求!

【讨论】:

    【解决方案2】:

    您准备好的陈述看起来不错。它应该从动机列中的当前值中减去 10。

    如果要扣除 20,您很可能会调用两次。

    确保您只调用一次execute(),如果您是从网页调用它,请确保您没有点击两次。

    【讨论】:

      【解决方案3】:

      当您在同一页面中编写 PHP 代码和 html 代码时会出现问题。如果您是第一次单击提交按钮插入,那么页面将再次刷新.. 是吗?然后再次执行代码。解决方法是在执行语句之前检查一个条件,该语句为我们提供数据。

      if($_POST['txtlocation']!='')
      {
      $sql = "INSERT INTO location(description) VALUES (:location)";
      $stmt = $pdo->prepare($sql);
      $stmt->bindParam(':location', $_POST['txtlocation'], PDO::PARAM_STR); 
      $stmt->execute();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多