Tôi đang sử dụng PHP/MySQL, để tạo mã truy cập cho từng mục nhập trong khi mở màn hình nhập.tạo mã truy cập để nhập cơ sở dữ liệu
Đây là mã tôi đang sử dụng
$qresult = $db->query("SELECT count(*) FROM ap_aurora_projects");
$row = $qresult->fetch_row();
$slno = $row[0] + 1;
$today = date("ymd");
$code = $today . "-" . $slno;
Mã này được tạo ra một cách chính xác và hiển thị cho người dùng trước khi ông tạo ra kỷ lục. Vấn đề là khi nhiều người dùng mở cùng một lúc mã được sao chép trong màn hình của họ.
Phương pháp để tránh trùng lặp là gì.
Tôi đã cố gắng tạo một bảng riêng để lưu số mới nhất và tăng lên cho mỗi yêu cầu, nhưng vấn đề là, nếu người dùng hủy mục nhập, số đó bị thiếu.
EDIT
Mã này được hoạt động bình thường khi một người sử dụng tạo mã và chèn các bản ghi. Nhưng vấn đề là nếu nhiều người dùng mở cùng một lúc nó tạo ra cùng một số cho họ trong màn hình của họ. Nếu tất cả chúng cố gắng lưu bản ghi, nó sẽ bị trùng lặp. Xin lưu ý rằng, tôi tạo số này và hiển thị trong màn hình nhập ban đầu không phải trong khi lưu bản ghi.
Mã trùng lặp chính xác như thế nào? Tôi chỉ có thể thấy truy vấn SELECT an toàn và tất cả người dùng sẽ thấy cùng một đầu ra trừ khi DB thay đổi trong một số phần khác của mã. Bạn nên cung cấp thêm mã của mình. –
cách các bản ghi ap_aurora_projects được chèn vào? mọi yêu cầu? –
Mã nào có yêu cầu? Tuy nhiên, bạn không thể sử dụng COUNT() của các hàng nếu bạn cần hiển thị mã trước INSERT(). –