当我需要知道插入之前是否有独特的东西。我通常只是尝试插入它然后如果失败,检查mysql_errno()是否是1062.如果我知道它作为重复键失败,我可以做我需要做的任何事情。
最常见的地方是用户表。我将电子邮件设置为唯一的登录“用户名”。在处理注册表单时,我只是编译查询,执行它并检查1062错误号,而不是运行其他查询来检查唯一性。如果它以1062失败,我很好地告诉用户该电子邮件已注册且一切都很好。
但是我最近建立了一个非常基本的MITM sql查询功能,它让我自己和其他开发人员在系统上访问查询时间,在页面底部的所有sql查询的日志,最重要的是,一个函数,根据需要建立与正确数据库的mysql连接(而不是手动连接和传递链接标识符)。
在sql错误查询日志中,此函数在磁盘上创建,是我所有重复的条目。对于看到错误的其他人来说,这显然不太好看(即使有处理和预期)。有没有办法以某种方式抑制错误,但仍能检查mysql_errno()?
答案 0 :(得分:1)
虽然我在SO上做了一些家务,但我认为最好用我的发现来回答这个问题,所以我可以关闭它。这基本上是我上面评论的结论。
如果您(像我一样)在您的应用程序中使用mysql中的某些错误代码来减少验证查询或代码(重复密钥是我发现的最常见的密钥)。停止抛出错误的唯一方法是捕获mysql中的错误并处理它。我不会进入这里的方法,但是一个开始的好地方是:
http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html
注意:只是为了新的开发者,也不要忘记查看“ON DUPLICATE KEY”(google it)。这是别人盲目地向我建议的事情。它不适合这个例子,但我已经用它来保存在插入之前检查重复记录的年份(它不会在重复条目上返回失败,所以如果您考虑使用重复的错误处理程序,它唯一的好处而是执行更新...因此在这里找到你的方式)