Cân nhắc đặt một unique
chỉ mục trên bảng cụ thể này. Đoạn mã sau sẽ thêm chỉ mục và xóa mọi bản sao hiện tại:
ALTER IGNORE TABLE `RegisteredUsersTable` ADD UNIQUE INDEX unique_email (`UserEmail`);
Sau khi điều này được thêm vào, hãy sử dụng INSERT IGNORE
hoặc INSERT...ON DUPLICATE KEY UPDATE
. Họ sẽ chỉ định dạng chèn trước nếu không có bản sao.
$mysqli->query("INSERT IGNORE INTO RegisteredUsersTable (UserName, UserEmail) VALUES ('".$newUserName."', '".$newUserEmail."')");
Mysql sẽ báo lỗi vì email đã có trong cơ sở dữ liệu. Tuy nhiên, lệnh BỎ QUA đang nói với tập lệnh không chú ý đến lỗi cho truy vấn này bởi vì, trong trường hợp này, bạn mong đợi nó cho một hàng trùng lặp.
Ngoài ra, có một cách để cảnh báo người dùng của bạn bằng thông báo thất bại hoặc thành công, ngay cả với INSERT IGNORE
. Sử dụng MYSQL LAST_INSERT_ID()
. Nếu một ID đã được cung cấp, nó đã được chèn. Nếu không, thì email đã ở đó (hoặc có một lỗi khác).