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é.
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 [kiso.vn]
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', 'KisoDemo'); // 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', 'KisoDemo'); // 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=KisoDemo", '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.
Danh sách file tải về
Tên file tải về | Pass giải nén |
---|---|
Tải bài học định dạng PDF | kiso.vn hoặc gameportable.net |
Bài viết liên quan
[CSF-2] Một số thiết lập CSF, LFD
Hôm nay mình sẽ thực hiện một số thiết lập trên CSF Mở file config để sửa đổi một số tính năng dưới /etc/csf/csf.conf Nội dung chính1. Lấy ID vừa insert bằng PHPTrường hợp MySQLi Object-oriented:Trường...
[CSF-1] Tăng bảo mật Server với ConfigServer Firewall (CSF)
Nội dung chính1. Lấy ID vừa insert bằng PHPTrường hợp MySQLi Object-oriented:Trường hợp MySQLi Procedural:Trường hợp PDO:2. Lời kết1. Khái niệm CSF: CSF (ConfigServer & Firewall) là một bộ ứng dụng hoạt động trên Linux như một firewall...
Sử dụng SSH Key với Gitlab và Github
Bài viết này mình sẽ hướng dẫn các bạn tạo ssh key cho Gitlab và Github SSH là gì? Secure Socket Shell là một giao thức mạng dùng để thiết lập kết nối mạng một...
Directory traversal vulnerabilities (phần 4)
Nội dung chính1. Lấy ID vừa insert bằng PHPTrường hợp MySQLi Object-oriented:Trường hợp MySQLi Procedural:Trường hợp PDO:2. Lời kếtV. Phân tích và khai thác các lỗ hổng Directory traversal (tiếp) 5. Bypass lỗ hổng khi trang web sử...
Directory traversal vulnerabilities (phần 3)
Nội dung chính1. Lấy ID vừa insert bằng PHPTrường hợp MySQLi Object-oriented:Trường hợp MySQLi Procedural:Trường hợp PDO:2. Lời kếtV. Phân tích và khai thác các lỗ hổng Directory traversal 1. Lỗ hổng xảy ra khi sử dụng các...
Directory traversal vulnerabilities (phần 2)
Nội dung chính1. Lấy ID vừa insert bằng PHPTrường hợp MySQLi Object-oriented:Trường hợp MySQLi Procedural:Trường hợp PDO:2. Lời kếtIII. Vì sao lỗ hổng Directory traversal xuất hiện? Với mỗi ngôn ngữ lập trình khác nhau, điểm xuất hiện...