如何优雅地捕获发生 1062 错误代码(重复键输入)的列名?
当我做:
$db = @new mysqli('localhost', 'root', '******', 'database');
$pstmt = $db->prepare("INSERT INTO users (person_id, user_name, password, e_mail) VALUES (LAST_INSERT_ID(), ?, ?, ?)");
$pstmt->bind_param("sss", $_POST["register_user_name"], md5($_POST["register_password"]), $_POST["register_e_mail"]);
// error occurred
if (!$pstmt->execute()) {
if ($db->errno == 1062) {
$column_duplicate_key_entry = /*how to obtain the column name(s)?*/;
}
}
唯一列是user_name
和e_mail
我知道我可以$db->error
通过自己调用和解析字段来获取错误字符串。但这在我看来并不优雅。还有其他更好的解决方案吗?
我想要做的是尝试插入一个新用户。如果插入的用户名已经存在,则会抛出 1062 错误,即当电子邮件地址已经存在时。我想检查是否只使用了用户名,或者只使用了电子邮件地址,或者两者兼而有之。再说一遍,我想以一种优雅的方式来做,而不是先选择电子邮件和用户名,然后检查它们是否已经存在。如果可能的话,我想做一个插入查询并从中获取所有信息。