我有一个 MySQL 表,其中有一个定义为唯一的电子邮件地址字段。对于此示例,假设我的表单所做的只是允许用户将他们的电子邮件地址插入表中。
由于电子邮件字段是唯一的,因此如果他们尝试输入相同的电子邮件两次,则查询应该会失败。我很好奇这两种情况之间的权衡:
SELECT
1)在执行插入之前运行一个快速语句。如果选择返回结果,通知用户,不要运行该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 为你检查数据会更好”。
编辑- 请注意,这不是一个“我该怎么做”的问题,而是一个“我为什么要以特定的方式做这个”的问题。我包含的小代码片段有效,但我很好奇的是解决问题的最佳方法。