【发布时间】:2012-06-02 05:56:57
【问题描述】:
我有一个 MySQL 表,其中有一个定义为唯一的电子邮件地址字段。对于这个例子,假设我的表单所做的只是允许用户将他们的电子邮件地址插入到表中。
由于电子邮件字段是唯一的,因此如果他们尝试输入相同的电子邮件两次,则查询应该会失败。我很好奇这两种情况之间的取舍:
1) 在执行插入之前运行一个快速的SELECT 语句。如果select返回结果,通知用户,不要运行INSERT语句。
2) 运行INSERT语句,检查是否有重复输入错误
// snippet uses PDO
if (!$prep->execute($values))
{
$err = $prep->errorInfo();
if (isset($err[1]))
{
// 1062 - Duplicate entry
if ($err[1] == 1062)
echo 'This email already exists.';
}
}
另外,请假设正常使用,这意味着重复条目应该是最少的。因此,在第一种情况下,您显然需要为 每个 插入运行额外的查询,而在第二种情况下,您依赖于错误处理。
另外,我很想听听关于编码风格的想法。我的心在说‘做一个防御型程序员!插入前检查数据!而我的大脑却在说“嗯,也许让 MySQL 为你检查数据会更好”。
编辑 - 请注意,这不是一个“我该怎么做”的问题,而是一个“我为什么要以特定的方式做这个”的问题。我包含的小代码 sn-p 有效,但我很好奇的是解决问题的最佳方法。
【问题讨论】:
-
你有没有想过使用
Exception? -
在什么方面?我当然会处理异常,但除非我遗漏了某些东西,否则异常处理超出了我的问题范围。