$link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db');
mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')");
$id = mysqli_insert_id($link);
Xem mysqli_insert_id()
.
Dù bạn làm gì, đừng chèn và sau đó thực hiện "SELECT MAX(id) FROM mytable
". Giống như bạn nói, đó là điều kiện của cuộc đua và không cần thiết. mysqli_insert_id()
đã có chức năng này.
Một cách khác là chạy cả hai truy vấn cùng một lúc và sử dụng MySQL
của LAST_INSERT_ID()
phương thức, trong đó cả hai bảng được sửa đổi cùng một lúc (và PHP không cần bất kỳ ID nào), như:
mysqli_query($link, "INSERT INTO my_user_table ...;
INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");
Lưu ý rằng Mỗi kết nối theo dõi ID riêng biệt (vì vậy, xung đột đã được ngăn chặn).