我目前正在使用Doctrine的DBAL库来进行MySQL接口,目前已构建了一个结构:
public function update(array $data, $id)
{
return $this->db->update($this->table, $data, array('id' => $id));
}
当然会返回受影响的行数。现在的问题是我在更新后执行某些操作,这些操作应该在成功更新后触发。在当前系统下,如果我要“编辑”一条记录(仅显示表格)并立即点击保存,则返回错误,因为我检查了上述更新功能的结果。这不仅会在我的网站中显示错误,还会阻止其他“成功更新”操作的运行。
有没有办法查看更新是否无法在受影响的行之外运行?我可以完全忽略这一点,并假设更新将始终有效吗?诱捕异常是否足以捕获任何致命错误?
答案 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(...);
}