2012-04-29 28 views
5

Im tự hỏi giải pháp nào là tốt nhất để lấy ID được chèn sau cùng sau khi truy vấn mysql?Cách tốt nhất để tìm ID được chèn cuối cùng trong mysql bằng cách sử dụng php

tôi đã tìm thấy các giải pháp sau:

<?php 
function get_current_insert_id($table) 
{ 
    $q = "SELECT LAST_INSERT_ID() FROM $table"; 
    return mysql_num_rows(mysql_query($q)) + 1; 
} 
?> 

hoặc thậm chí sử dụng mysql_insert_id php function, nhưng dường như chức năng này sẽ không hoạt động tốt với bigint (đó là những gì tôi đang sử dụng cho trường ID) và nếu có rất nhiều các yêu cầu sql liên tiếp có thể không đáng tin cậy.

Ai đó có thể cung cấp giải pháp đáng tin cậy và nhanh chóng để đạt được nhiệm vụ này?

+1

Đó là việc sử dụng LAST_INSERT_ID() không hợp lệ tại đó. Bạn sẽ lấy nó như một cột bình thường. mysql_num_rows() sẽ luôn là một cho truy vấn đó. – Corbin

+0

Tôi thấy rằng chức năng trên php.net và các poster tuyên bố rằng chức năng này giải quyết tất cả các vấn đề được gây ra bởi 'mysql_insert_id'! –

+1

-1 để đặt câu hỏi thay vì đọc hướng dẫn sử dụng –

Trả lời

10
+0

Vâng đó là câu hỏi của tôi, làm thế nào nó sẽ phản ứng khi có rất nhiều kết nối sql liên tiếp và nhiều truy vấn sql đang chạy. –

+1

@AhouraGhotbi: ['LAST_INSERT_ID()'] (http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id) là mỗi kết nối. – eggyal

+0

Tôi nghĩ rằng liên kết đến tài liệu sẽ tốt hơn so với một bài diễn đàn ngẫu nhiên không có trích dẫn (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id). Tuy nhiên, nó là chính xác, và lưu ý mysql_pconnect là một lưu ý tốt. – Corbin

4

Nếu bạn chèn nhiều hàng sử dụng một câu lệnh INSERT duy nhất, LAST_INSERT_ID() trả về giá trị được tạo ra chỉ hàng chèn đầu tiên. Lý do cho điều này là làm cho nó có thể tái tạo dễ dàng cùng một câu lệnh INSERT đối với một số máy chủ khác.

+3

Nếu bạn đang sao chép/dán một cái gì đó từ tài liệu, bạn nên trích dẫn nó. – Corbin

Các vấn đề liên quan