M M*_*ler 2 php mysql mysqli unique-constraint
我想知道是否有一种简单的方法可以检查INSERT语句是否在执行INSERT时由于MySQL字段上的唯一索引而触发冲突.
例如,假设我正在向数据库添加用户,并且username是一个唯一索引:
$sql = new MySQLi(...);
$res = $sql->query('INSERT INTO `users` (`username`) VALUES ("john_galt");');
Run Code Online (Sandbox Code Playgroud)
名为的用户john_galt已存在,因此不会执行INSERT.但是,如何才能以最有意义的错误对用户做出最佳响应(即具有该用户名的用户已经存在;请选择一个唯一的名称.)?
我想到了一些事情,比如检查是否insert_id已设置 - 如果查询生成错误,则不应该这样做.但这个错误可能是任何事情.
类似地,我可以检查是否$sql->error不是空的,除了,这可能是任何东西 - 语法错误,或格式错误的值,或其他什么.显然,我不打算为最终用户打印出实际的MySQL错误.
我能想到的两个解决方案是:
SELECT TRUE FROM ``users`` WHERE ``username`` = "john_galt";以查看数据库中是否已存在用户名,但我觉得我在该字段中添加了一个唯一约束,这样我就不必这样做了 - 否则就会失败.strpos($sql->error, 'Duplicate entry') === 0 - 看起来非常可怕.有没有更好的方法来确定使用PHP的MySQLi类?
您可以使用errno获取返回的错误代码并使用它,例如:
if($sql->errno === 1062) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
以下是MySQL 5.5的错误代码列表:http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html
| 归档时间: |
|
| 查看次数: |
1873 次 |
| 最近记录: |