Tôi đã tìm thấy một vài câu trả lời cho điều này bằng cách sử dụng mySQL, nhưng tôi hy vọng ai đó có thể chỉ cho tôi một cách để lấy ID của hàng được chèn hoặc cập nhật cuối cùng một mysql DB khi sử dụng PHP để xử lý các chèn/cập nhật.nhận mysql_insert_id() trong khi sử dụng ON DUPLICATE KEY UPDATE với PHP
Hiện nay tôi có một cái gì đó như thế này, nơi cột3 là một khóa duy nhất, và đó cũng là một cột id đó là một khóa chính autoincremented:
$query ="INSERT INTO TABLE (column1, column2, column3) VALUES (value1, value2, value3) ON DUPLICATE KEY UPDATE SET column1=value1, column2=value2, column3=value3";
mysql_query($query);
$my_id = mysql_insert_id();
$ my_id là đúng trên INSERT, nhưng không chính xác khi nó cập nhật một hàng (ON CẬP NHẬT KEY DUPLICATE).
Tôi đã thấy nhiều bài viết với những người tư vấn mà bạn sử dụng một cái gì đó giống như
INSERT INTO table (a) VALUES (0) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)
để có được một giá trị ID hợp lệ khi ON DUPLICATE KEY là invoked-- nhưng sẽ trở lại này mà ID hợp lệ để PHP mysql_insert_id()
chức năng?
Tôi không có câu trả lời. Nhưng giải pháp trông rất thông minh. Tại sao bạn không thử nó? Tôi nghĩ sẽ không khó để tạo ra một trường hợp thử nghiệm mà sẽ đưa ra một câu trả lời dứt khoát. PS: Đừng hiểu lầm tôi; Tôi có thể hiểu bạn sẽ muốn đảm bảo. Có lẽ tôi cũng vậy. Nhưng tôi sẽ thử nó trước tiên. :) –
Tôi đã tò mò làm thế nào mà có thể làm việc nhưng tôi tìm thấy điều này trong hướng dẫn MySQL: * Nếu expr được đưa ra như là một đối số để LAST_INSERT_ID(), giá trị của đối số được trả về bởi hàm và được nhớ là giá trị tiếp theo được trả về bởi LAST_INSERT_ID() *. –
@Alexandre: có, và giả sử 'mysql_insert_id()' chỉ là một proxy cho 'LAST \ _INSERT \ _ID()' Tôi nghĩ rằng điều này sẽ làm việc như mong đợi. –