2012-03-27 29 views
19

Tôi có mã sau:ID Chèn Cuối cùng PDO luôn là đúng?

<? 
$query =$db->prepare("INSERT INTO a_table (id, a_field) VALUES ('', (:a_field)"); 
$query->bindParam(":a_field", $a_value); 
$query->execute(); 
$last_id = $db->lastInsertId('a_table'); 
?> 

Điều tôi muốn hỏi là điều này. Hãy tưởng tượng khi hai người tải trang cùng một lúc, có nguy hiểm gì khi truy vấn người khác được chèn trước khi ID cuối cùng được truy xuất, trộn các ID không?

+11

Không, sẽ không có xung đột. Id chèn phụ thuộc vào kết nối và mỗi lần tải trang sẽ thiết lập kết nối mới. –

+5

Phụ thuộc vào cơ sở dữ liệu cơ bản. Nếu đó là mysql, PDO sẽ đơn giản gọi hàm mysql last_insert_id() API, đảm bảo rằng ID trả về là ID được tạo bởi truy vấn chèn cuối cùng được thực hiện bởi kết nối PDO của bạn. –

+1

có thể trùng lặp của [LAST_INSERT_ID() cách hoạt động tại môi trường nhiều người dùng] (http://stackoverflow.com/questions/5835677/last-insert-id-how-it-works-at-multi-users-environment) –

Trả lời

24

Không, tình huống này là không thể. Phương thức $ db-> lastInsertId() trả về id được chèn cuối cùng cho phần con DB này. Trong trang khác sẽ là một kết nối khác và một id được chèn cuối cùng.

6

PDO sẽ trả lại cho bạn ID cuối cùng được chèn vào bởi kết nối cơ sở dữ liệu hiện hoạt đang hoạt động.

0

Chỉ phải đối mặt sau tình huống

Có tập tin post.php trong đó bao gồm một tập tin (như insert.php).

Tổng số các mã để chèn vào mysql tọa lạc tại insert.php

Trong insert.php là mã $id_of_inserted_row = $db->lastInsertId();

Sau đó, trong insert.phpecho $id_of_inserted_row; trong đó cho thấy giá trị đúng.

Nhưng echo $id_of_inserted_row; trong post.php hiển thị giá trị không chính xác (như tôi thấy hiển thị 7 số nhỏ hơn giá trị thực). Tôi không hiểu tại sao, chỉ cần tính đến.

Cập nhật

Xin lỗi, trên văn bản là vì lắp vào hai bảng và sử dụng lẫn lộn cùng $id_of_inserted_row = $db->lastInsertId(); cho cả hai bảng.

Vì vậy, tôi có cùng một kết luận như trong các câu trả lời khác: lastInsertId() là id của hàng được chèn cuối cùng.

Tình huống phải đối mặt. Tôi đã chèn 2 hàng vào mysql. Trong trường hợp này tôi thấy rằng lastInsertId() là id của hàng được chèn đầu tiên (không phải là cuối cùng). Không hiểu tại sao ... Tìm thấy câu trả lời https://stackoverflow.com/a/12574752/2118559

Quan trọng 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.

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