更新在控制台中读取成功,但数据库不受影响

Posted

技术标签:

【中文标题】更新在控制台中读取成功,但数据库不受影响【英文标题】: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 个参数时,我仍然得到“成功:记录更新”。但该表实际上不受影响。

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

* 更新 *

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

【问题讨论】:

【参考方案1】:

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

if ($update)

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

你应该是:

    检查$update-&gt;execute的结果,例如
    if ($update->execute([ /* params */])) 
    检查$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 我明白你的意思——第二双眼睛通常就是我们所需要的。我很高兴你知道了。

以上是关于更新在控制台中读取成功,但数据库不受影响的主要内容,如果未能解决你的问题,请参考以下文章

C++读取注册表时使用服务失败但在控制台中同样成功

更新 Facebook SDK 问题

SSL证书过期了怎么办

Win软件 - (Net-Framework)已处理证书链,但是在不受信任提供程序信任的根证书中终止

代码缺陷解读——不受控制的资源消耗及表达式永假永真

在 Iphone 中使用页面控制滑动图像