【问题标题】:Update reads successful in console, but the database is unaffected更新在控制台中读取成功,但数据库不受影响
【发布时间】:2020-10-09 06:57:21
【问题描述】:

尝试使用 PHP 和 PDO 语句更新记录。

查询触发没有错误,控制台读取更新成功,但表中没有变化。

很困惑为什么会这样:

<?php
include("../include/sessions.php");

if(isset($_POST['editcriteria']))
{
  $value = $_POST['editcriteria'];

  $editUID = $value['editUID'];
  $editAddDelete = $value['editAddDelete'];
  $editeffectiveDate = $value['editeffectiveDate'];

  try
  {
    $update = $conn->prepare("UPDATE primary_vehicle_data SET `add_delete` = :eadddelete, 
                                   `effective_date` = :eeffectivedate WHERE `uid` = :euid");

    $update->execute([
     'eadddelete' => $editAddDelete,
     'eeffectivedate' => $editeffectiveDate,
     'euid' => $editUID
    ]);

    if($update)
    {
      echo "Success: Record Updated";
    }
    else
    {
      echo "Error: The Vehcile was not updated.";
    }
  }
  catch(PDOException $e)
  {
    echo "Error: " . $e->getMessage();
  }
}
?>

我尽可能地简化了上面的代码。还有几个参数,但是当我删除参数并保留上面的 3 个参数时,我仍然得到“成功:记录更新”。但该表实际上不受影响。

为什么会发生这种情况,我该如何解决?

* 更新 *

我已经确认与数据库的连接良好。我迷路了。

【问题讨论】:

    标签: php jquery mysql pdo


    【解决方案1】:

    $update 是一个PDOStatement 对象,所以当你测试时

    if ($update)
    

    它总是会成功,因为 PDOStatement 对象等同于 true

    你应该是:

    1. 检查$update-&gt;execute的结果,例如
        if ($update->execute([ /* params */])) {
    
    1. 检查$update-&gt;rowCount 中的值,这将告诉您是否有任何行受到查询的影响。

    【讨论】:

    • 我从来没有遇到过这个问题。我整天都这样做,现在我正在做一个副项目,我遇到了问题。所以你是说,我需要在 IF 语句中执行更新,还要在 IF 语句中绑定参数?像这样: if($update->execute(['eadddelete' => $editAddDelete,'eeffectivedate' => $editeffectiveDate])
    • 你可以这样做 $result = $update-&gt;execute([ /* params */])); if ($result) 话虽如此,如果你启用了异常模式,大多数可能返回 false 的查询失败模式应该会导致异常。但是你一定要检查rowCount
    • 所以我尝试打印 rowCount,结果返回 0 条记录已更新。我迷路了。仍在测试中...
    • 这可能意味着$editUID 没有您认为应该包含的内容。该值或具有该值的行与您尝试将其更新到的值相同。
    • @JohnBeasley 我明白你的意思——第二双眼睛通常就是我们所需要的。我很高兴你知道了。
    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 2012-04-28
    • 2016-03-23
    • 2020-07-23
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多