Hướng dẫn dùng mysql last_insert_id trong PHP

Trong bài này mình sẽ hướng dẫn cách sử dụng hàm LAST_INSERT_ID trong MySQL thông qua cú pháp và ví dụ thực tế.

Hướng dẫn dùng mysql last_insert_id trong PHP

Hướng dẫn dùng mysql last_insert_id trong PHP

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Mô tả

Hàm LAST_INSERT_ID trả về giá trị AUTO_INCREMENT đầu tiên được đặt bởi câu lệnh INSERT hoặc UPDATE gần đây nhất đã ảnh hưởng đến cột AUTO_INCREMENT.

2. Cú pháp

Cú pháp của hàm LAST_INSERT_ID trong MySQL là:

LAST_INSERT_ID( [expression] )

3. Version

Hàm LAST_INSERT_ID có thể được sử dụng trong các phiên bản sau của MySQL:

Bài viết này được đăng tại [free tuts .net]

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23

4. Ví dụ

Ví dụ chúng ta có bảng SinhVien, có cột mssv là AUTO_INCREMENT

CREATE TABLE SinhVien 
( mssv INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
  ten VARCHAR(100) NOT NULL,
  noisinh VARCHAR(200) );

Dữ liệu của bảng SinhVien như sau:

mssv ten noisinh
1 Nguyen Van A Thoi Binh - Ca Mau
2 Nguyen Van B Vi Thuy - Hau Giang
3 Nguyen Van C Quan 3 - Ho Chi Minh
4 Nguyen Van D Ninh Kieu - Can Tho

Chúng ta thêm 1 dòng mới vào bảng SinhVien

INSERT INTO SinhVien
(ten, noisinh)
VALUES
('Nguyen Van E', 'Cai Nuoc -  Ca Mau');

Kết quả sau khi thêm 1 dòng mới:

mssv ten noisinh
1 Nguyen Van A Thoi Binh - Ca Mau
2 Nguyen Van B Vi Thuy - Hau Giang
3 Nguyen Van C Quan 3 - Ho Chi Minh
4 Nguyen Van D Ninh Kieu - Can Tho
5 Nguyen Van E Cai Nuoc - Ca Mau

Chúng ta thực thi hàm LAST_INSERT_ID(), kết quả như sau:

mysql> SELECT LAST_INSERT_ID();
Ket qua: 5

Thông thường khi thiết kế CSDL cho các hệ thống website thì khóa chính ta hay sử dụng tăng tự động (auto_increment), vì vậy lúc thêm dữ liệu ta không cần phải giá trị ID khóa chính. Như vậy ta không thể biết được khóa chính của record vừa insert là bao nhiêu? Trong MySQL có một câu truy vấn giúp lấy ID vừa insert đó là hàm LAST_INSERT_ID(). Đó là MySQL, còn PHP lấy như thế nào thì ta cùng tìm hiểu nhé.

Hướng dẫn dùng mysql last_insert_id trong PHP

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Lấy ID vừa insert bằng PHP

Trong các mô hình  CSDL có mối quan hệ khóa ngoại nên lúc Insert đôi lúc ta cần lấy giá trị khóa chính của field vừa insert để các table con sử dụng làm khóa ngoại. Lúc này ta phải sử dụng các hàm có sẵn trong PHP để giải quyết.

Mỗi thư viện database trong PHP đều cung cấp những hàm và phương thức giúp lấy ID vừa insert (tức là id cuối cùng).

Đối với thư viện MySQLi thì ta có hàm mysqli_insert_id() và thuộc tính insert_id. Còn đối với PDO thì ta có phương thức lastInsertId().

Bài viết này được đăng tại [free tuts .net]

Sau đây là ba ví dụ về cách lấy ID vừa insert.

Trường hợp MySQLi Object-oriented:

// Tạo kết nối
$conn = new mysqli('localhost', 'root', 'vertrigo', 'FreetutsDemo');
 
// Kiểm tra kết nối
if ($conn->connect_error) {
    die("Kết nối thất bại: " . $conn->connect_error);
} 
 
// Câu SQL Insert
$sql = "INSERT INTO News (title, content) 
        VALUES ('tieu de', 'noi dung')";
 
// Thực hiện thêm record
if ($conn->query($sql) === TRUE) {
    $last_id = $conn->insert_id;
    echo "Thêm record thành công có ID là $last_id";
} else {
    echo "Lỗi: " . $sql . "<br>" . $conn->error;
}
 
// Ngắt kết nối
$conn->close();

Trường hợp MySQLi Procedural:

// Tạo kết nối
$conn = mysqli_connect('localhost', 'root', 'vertrigo', 'FreetutsDemo');
 
// Kiểm tra kết nối
if (!$conn) {
    die("Kết nối thất bại: " . mysqli_connect_error());
}
 
// Câu SQL Insert
$sql = "INSERT INTO News (title, content) 
        VALUES ('tieu de', 'noi dung')";
 
// Thực hiện thêm record
if (mysqli_query($conn, $sql)) {
    $last_id = mysqli_insert_id($conn);
    echo "Thêm record thành công có ID là $last_id";
} else {
    echo "Lỗi: " . $sql . "<br>" . mysqli_error($conn);
}
 
// Ngắt kết nối
mysqli_close($conn);

Trường hợp PDO:

try {
    // Tạo kết nối
    $conn = new PDO("mysql:host=localhost;dbname=FreetutsDemo", 'root', 'vertrigo');
     
    // Cấu hình exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
     
    // Câu SQL Insert
    $sql = "INSERT INTO News (title, content) 
            VALUES ('tieu de', 'noi dung')";
 
    // Thực hiện thêm record
    $conn->exec($sql);
    
    $last_id = $conn->lastInsertId();
    
    echo "Thêm record thành công có ID là $last_id";
} 
catch (PDOException $e) {
    echo $e->getMessage();
}
 
// Ngắt kết nối
$conn = null;

2. Lời kết

Trên là ba ví dụ điển hình về cách lấy ID auto_increment vừa Insert, bài tiếp theo chúng ta sẽ tìm hiểu cách thực hiện nhiều câu truy vấn cùng lúc bằng PHP.