Học lập trình PHP cơ bản

Bài 24: 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().
Sau đây là 3 cách lấy ID vừa insert.

1) Sử dụng MySQLi Object-oriented:

// Tạo kết nối
$conn = new mysqli('localhost', 'root', '', 'demo');
  
// 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();

2) Sử dụng MySQLi Procedural

// Tạo kết nối
$conn = mysqli_connect('localhost', 'root', '', 'demo');
  
// 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);

3) Sử dụng PDO:

try {
    // Tạo kết nối
    $conn = new PDO("mysql:host=localhost;dbname=demo", 'root', '');
      
    // 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;