1

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

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

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

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

4

3 回答 3

1

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

请注意,update() 方法不会进行转义,因此您可以自行清理数据。

于 2012-03-15T14:21:22.167 回答
1

您可以假设更新在大多数情况下都有效,但您可能想研究Transactions,如果出现问题,它们是处理异常和维护数据库完整性的最佳方式。由于此答案中列出的原因,PHP 不提供从致命错误中恢复的常规方法。

于 2012-03-15T14:25:26.663 回答
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(...);
}
于 2017-05-27T20:42:06.683 回答