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

时间:2012-03-15 14:08:16

标签: php mysql doctrine dbal

我目前正在使用Doctrine的DBAL库来进行MySQL接口,目前已构建了一个结构:

public function update(array $data, $id)
{
    return $this->db->update($this->table, $data, array('id' => $id));
}

当然会返回受影响的行数。现在的问题是我在更新后执行某些操作,这些操作应该在成功更新后触发。在当前系统下,如果我要“编辑”一条记录(仅显示表格)并立即点击保存,则返回错误,因为我检查了上述更新功能的结果。这不仅会在我的网站中显示错误,还会阻止其他“成功更新”操作的运行。

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

3 个答案:

答案 0 :(得分:1)

您可以假设更新始终有效。对于诸如无效字段名称或约束违规等主要问题,将抛出异常。考虑制作一些测试用例只是为了让自己相信这一点。

请注意,使用update()方法无法进行转义,因此您可以清理数据。

答案 1 :(得分:1)

您可以假设更新大部分工作,但您可能希望查看Transactions,如果出现问题,它们是处理异常和维护数据库完整性的最佳方式。 PHP不提供从reasons outlined in this answers的致命错误中恢复的传统方法。

答案 2 :(得分:1)

  

在当前系统下,如果我要“编辑”一条记录(显示表格   只有)并立即点击保存它返回错误,因为我检查   上面更新功能的结果

不要忘记$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(...);
}