1

哪个是处理FOREIGN KEY数据库错误的最佳方法INSERT

  1. PHP之前INSERT:加载SELECT检查外键匹配的附加查询()?

  2. 让 MySQL 引发错误,而 PDO 抛出异常?

  3. 存在更多选择吗?

与速度/优雅/可重用代码/等进行比较。

4

3 回答 3

1

在您接触数据库之前检查您意识到可能存在的错误总是有意义的,所以我会说选项 1 是最好的选择。它还为您提供更用户友好的错误报告。

于 2012-04-11T15:47:55.637 回答
1

有时 1) 不是一种选择。想象一下,您有参加会议的人员。如果您有一个 PeopleMeetings 表(M 到 N 关联),您不能执行 SELECT 然后执行 INSERT... b/c 您可以执行 SELECT 并发现 Person 和 Meeting 都存在,然后另一个进程可以删除会议,然后您将执行插入,这将失败 b/c 会议不再存在。

这就是为什么我总是做 2)... 显然,如果会议不存在,我会在加载页面之前做一个 SELECT,向用户显示系统上当前的会议,但是做 2) 是必须的。

更不用说你不需要再做 2 个额外的查询(在我的例子中)一个到 People,另一个到 Meeting……你仍然可以优雅地处理错误,向用户提供出错的信息(当你如果你做了 2 SELECT 查询会做)

此外,您应该使用事务...这样,如果您正在对数据库进行更改并且此 INSERT 失败,则事务将回滚并且数据库不会处于不一致状态

于 2012-04-11T15:48:29.880 回答
0

如果您不想“用户友好”并显示有用的错误消息,我会说 1。

当然,答案将取决于您的上下文...

于 2012-04-11T15:45:36.023 回答