Khi làm việc với cơ sở dữ liệu MySQL trong PHP, một tình huống phổ biến là sau khi chèn một bản ghi mới vào bảng với một trường AUTO_INCREMENT (tự động tăng), bạn muốn lấy ID cuối cùng vừa được chèn. PHP cung cấp các phương pháp để lấy ID này thông qua cả mysqli và PDO.
1. Lấy ID cuối cùng bằng mysqli
Sau khi thực hiện một câu lệnh INSERT, bạn có thể sử dụng phương thức insert_id để lấy giá trị của trường AUTO_INCREMENT từ bản ghi vừa được chèn.
a) Sử dụng hướng đối tượng (OOP)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// Tạo kết nối
$conn = new mysqli($servername, $username, $password, $dbname);
// Kiểm tra kết nối
if ($conn->connect_error) {
die("Kết nối thất bại: " . $conn->connect_error);
}
// Chèn dữ liệu vào bảng
$sql = "INSERT INTO Users (username, email) VALUES ('john_doe', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
// Lấy ID vừa được chèn
$last_id = $conn->insert_id;
echo "Dữ liệu đã được chèn thành công. ID cuối cùng: " . $last_id;
} else {
echo "Lỗi khi chèn dữ liệu: " . $conn->error;
}
// Đóng kết nối
$conn->close();
?>b) Sử dụng hướng thủ tục
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// Tạo kết nối
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Kiểm tra kết nối
if (!$conn) {
die("Kết nối thất bại: " . mysqli_connect_error());
}
// Chèn dữ liệu vào bảng
$sql = "INSERT INTO Users (username, email) VALUES ('jane_doe', 'jane@example.com')";
if (mysqli_query($conn, $sql)) {
// Lấy ID vừa được chèn
$last_id = mysqli_insert_id($conn);
echo "Dữ liệu đã được chèn thành công. ID cuối cùng: " . $last_id;
} else {
echo "Lỗi khi chèn dữ liệu: " . mysqli_error($conn);
}
// Đóng kết nối
mysqli_close($conn);
?>Giải thích:
$conn->insert_id(hoặcmysqli_insert_id($conn)) được sử dụng để lấy ID cuối cùng của trườngAUTO_INCREMENTsau khi thực hiện câu lệnhINSERT.- Nếu bảng không có trường
AUTO_INCREMENT, phương thức này sẽ trả về0.
2. Lấy ID cuối cùng bằng PDO
Trong PDO, bạn có thể sử dụng phương thức lastInsertId() để lấy ID của bản ghi vừa được chèn.
Ví dụ với PDO:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
try {
// Tạo kết nối PDO
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// Cài đặt chế độ lỗi PDO thành Exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Chèn dữ liệu vào bảng
$sql = "INSERT INTO Users (username, email) VALUES ('alice', 'alice@example.com')";
$conn->exec($sql);
// Lấy ID vừa được chèn
$last_id = $conn->lastInsertId();
echo "Dữ liệu đã được chèn thành công. ID cuối cùng: " . $last_id;
} catch(PDOException $e) {
echo "Lỗi khi chèn dữ liệu: " . $e->getMessage();
}
// Đóng kết nối
$conn = null;
?>Giải thích:
$conn->lastInsertId(): Trả về ID của bản ghi vừa được chèn vào cơ sở dữ liệu cho cộtAUTO_INCREMENT.- Nếu bảng không có cột
AUTO_INCREMENT, phương thức này sẽ trả về0.
3. Trường hợp sử dụng AUTO_INCREMENT
Phương pháp lấy ID cuối cùng chỉ hoạt động với các bảng có cột AUTO_INCREMENT. Trong trường hợp cột không có thuộc tính này, phương thức sẽ không trả về giá trị mong muốn. Đảm bảo rằng bảng của bạn được cấu hình đúng để sử dụng AUTO_INCREMENT trên cột khóa chính (thường là cột id).
Ví dụ, khi tạo bảng Users:
CREATE TABLE Users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL,
email VARCHAR(50)
);Cột id được đánh dấu là AUTO_INCREMENT, điều này đảm bảo mỗi bản ghi mới sẽ có một giá trị ID duy nhất và tự động tăng.
4. Xử lý lỗi khi chèn dữ liệu và lấy ID
Trong quá trình chèn dữ liệu vào bảng và lấy ID cuối cùng, có thể xảy ra lỗi. Bạn nên xử lý các lỗi này để đảm bảo ứng dụng hoạt động ổn định.
mysqli:- Sử dụng phương thức
$conn->error(hướng đối tượng) hoặcmysqli_error($conn)(hướng thủ tục) để kiểm tra lỗi trong quá trình chèn dữ liệu.
- Sử dụng phương thức
- PDO:
- Sử dụng khối
try-catchđể bắt các ngoại lệ và hiển thị thông báo lỗi.
- Sử dụng khối
Ví dụ với PDO:
try {
$conn->exec($sql);
$last_id = $conn->lastInsertId();
} catch(PDOException $e) {
echo "Lỗi khi chèn dữ liệu: " . $e->getMessage();
}5. Kết luận
Việc lấy ID cuối cùng của bản ghi vừa được chèn vào bảng MySQL là rất quan trọng trong nhiều tình huống, đặc biệt khi bạn cần liên kết dữ liệu giữa các bảng có quan hệ với nhau. Cả mysqli và PDO đều cung cấp các phương thức dễ sử dụng để lấy giá trị ID cuối cùng của cột AUTO_INCREMENT.
- Sử dụng
$conn->insert_idvớimysqli. - Sử dụng
$conn->lastInsertId()với PDO.
Việc này đảm bảo bạn có thể truy xuất và sử dụng ID vừa được tạo để thực hiện các thao tác tiếp theo trong ứng dụng của mình.









