Php 使用DBAL,如何确定更新失败?

Php 使用DBAL,如何确定更新失败?,php,mysql,doctrine,dbal,Php,Mysql,Doctrine,Dbal,我目前正在使用Doctrine的库进行MySQL接口,并围绕以下内容构建了一个结构: public function update(array $data, $id) { return $this->db->update($this->table, $data, array('id' => $id)); } 这当然会返回受影响的行数。现在的问题是,我在更新后执行某些操作,这些操作应该在成功更新后触发。在当前系统下,如果我要“编辑”一条记录(仅显示表单)并立即单击

我目前正在使用Doctrine的库进行MySQL接口,并围绕以下内容构建了一个结构:

public function update(array $data, $id)
{
    return $this->db->update($this->table, $data, array('id' => $id));
}
这当然会返回受影响的行数。现在的问题是,我在更新后执行某些操作,这些操作应该在成功更新后触发。在当前系统下,如果我要“编辑”一条记录(仅显示表单)并立即单击“保存”,它将返回一个错误,因为我检查了上面更新函数的结果。这不仅会在我的站点中显示错误,还会阻止其他“成功更新”操作的运行


是否有办法查看更新是否未能在受影响的行之外运行?我可以完全忽略这一点,并假设更新将始终有效吗?捕获异常是否足以捕获任何致命错误?

您可以假设更新将始终有效。对于诸如无效字段名或违反约束等重大问题,将引发异常。考虑做一些测试案例来说服自己。


请注意,update()方法不会进行转义,因此清理数据取决于您。

您可以假设更新在大部分情况下都可以工作,但您可能需要研究一下,如果出现问题,它们是处理异常和维护数据库完整性的最佳方法。PHP不提供从致命错误中恢复的常规方法

在当前系统下,如果我要“编辑”记录(显示表单 仅)并立即单击save,因为我检查了 上面更新函数的结果

不要忘记
$this->db->update()
返回受影响的行数(失败时返回false)。如果只打开“编辑”并单击“保存”,数据将不会更改,“受影响的行”将为0。要返回成功或失败的
$this->db->update(…)
您可以使用
false==

if ($myModel->update($data, $id)) {
    echo "success";
}
在您的myModel中:

public function update(array $data, $id)
{
     return false !== $this->db->update(...);
}