更新在控制台中读取成功,但数据库不受影响
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->execute
的结果,例如
if ($update->execute([ /* params */]))
-
检查
$update->rowCount
中的值,这将告诉您是否有任何行受到查询的影响。
【讨论】:
我从来没有遇到过这个问题。我整天都这样做,现在我正在做一个副项目,我遇到了问题。所以你是说,我需要在 IF 语句中执行更新,还要在 IF 语句中绑定参数?像这样: if($update->execute(['eadddelete' => $editAddDelete,'eeffectivedate' => $editeffectiveDate]) 你可以这样做$result = $update->execute([ /* params */])); if ($result)
话虽如此,如果你启用了异常模式,大多数可能返回 false 的查询失败模式应该会导致异常。但是你一定要检查rowCount
。
所以我尝试打印 rowCount,结果返回 0 条记录已更新。我迷路了。仍在测试中...
这可能意味着$editUID
没有您认为应该包含的内容。该值或具有该值的行与您尝试将其更新到的值相同。
@JohnBeasley 我明白你的意思——第二双眼睛通常就是我们所需要的。我很高兴你知道了。以上是关于更新在控制台中读取成功,但数据库不受影响的主要内容,如果未能解决你的问题,请参考以下文章