01/10/2018, 16:53

Bài 05: Lấy ID vừa insert bằng PHP

Trong các ứng dụng CSDL thực tế tồn tại mối quan hệ khóa chính(PRIMARY KEY) và khóa ngoại(FOREIGN KEY) khi bạn sử dụng câu lệnh Insert bạn cần lấy được giá trị ID của bảng cha làm khóa ngoại của các bảng con. Ví dụ : Trong database CSDL mẫu ta có hai bảng orders và orderdetails Như ...

Trong các ứng dụng CSDL thực tế tồn tại mối quan hệ khóa chính(PRIMARY KEY) và khóa ngoại(FOREIGN KEY) khi bạn sử dụng câu lệnh Insert bạn cần lấy được giá trị ID của bảng cha làm khóa ngoại của các bảng con.

Ví dụ: Trong database CSDL mẫu ta có hai bảng orders và orderdetails

Như các bạn đã biết một đơn hàng thì sẽ có một hay nhiều sản phầm. Bảng orders lưu trữ thông tin của đơn hàng và bảng orderdetails lưu trữ thông tin của sản phẩm trong đơn hàng đó và chúng được ràng buộc với nhau bởi orderNumber là khóa chính và khóa ngoại.

Khi bạn muốn lấy thông tin của đơn hàng thì bắt buộc bạn phải lấy được orderNumber từ đó bạn mới lấy được chi tiết sản phầm nào đã được mua trong đơn hàng đó.

Trong MySQL làm sao ta có thể lấy được ID vừa mới chèn vào CSDL của một table. Nói chung thì các hệ quản trị CSDL nào cũng cung cấp cho chúng ta hàm để thực hiện việc này. Đố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(). 

Chúng ta sẽ có 3 trường hợp như sau:

Trường hợp MySQLi Object-oriented

$host = "localhost";
$username = "username";
$password = "";
$dbName = "MySQLDemo";

// Tạo kết nối
$dbconn = new mysqli($host, $username, $password, $dbName);

// Kiểm tra kết nối
if ($dbconn->connect_error) {
	die("Kết nối thất bại: " . $dbconn->connect_error);
} 

// Câu SQL Insert
$sql = "INSERT INTO News (title, slug, intro)
VALUES ('Học PHP & MySQL', 'hoc-php-mysql', 'Mô tả ngắn về học PHP & MySQL')";

// Thực hiện thêm record
if ($dbconn->query($sql) === TRUE) {
	$last_id = $dbconn->insert_id;
	echo "Thêm mới thành công có ID là: " . $last_id;
} else {
	echo "Lỗi: " . $sql . "<br>" . $dbconn->error;
}

// Ngắt kết nối
$dbconn->close();

Trường hợp MySQLi Procedural

$host = "localhost";
$username = "username";
$password = "";
$dbName = "MySQLDemo";

// Tạo kết nối
$dbconn = mysqli_connect($host, $username, $password, $dbName);

// Kiểm tra kết nối
if (!$dbconn) {
	die("Kết nối thất bại: " . mysqli_connect_error());
} 

// Câu SQL Insert
$sql = "INSERT INTO News (title, slug, intro)
VALUES ('Học PHP & MySQL', 'hoc-php-mysql', 'Mô tả ngắn về học PHP & MySQL')";

// Thực hiện thêm record
if (mysqli_query($sql) === TRUE) {
	$last_id = mysqli_insert_id($dbconn);
	echo "Thêm mới thành công có ID là: " . $last_id;
} else {
	echo "Lỗi: " . $sql . "<br>" . mysqli_error($dbconn);
}

// Ngắt kết nối
mysqli_close();

Trường hợp PDO

$host = "localhost";
$username = "username";
$password = "";
$dbName = "MySQLDemo";

try {
    // Tạo kết nối
    $dbconn = new PDO("mysql:host=$host;dbname=$dbName", $username, $password);
      
    // Cấu hình exception
    $dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      
   // Câu SQL Insert
	$sql = "INSERT INTO News (title, slug, intro)
	VALUES ('Học PHP & MySQL', 'hoc-php-mysql', 'Mô tả ngắn về học PHP & MySQL')";
  
    // Thực hiện thêm record
    $dbconn->exec($sql);
     
    $last_id = $dbconn->lastInsertId();
    echo "Thêm mới thành công có ID là: " . $last_id;
} 
catch (PDOException $e) {
    echo $e->getMessage();
}
  
// Ngắt kết nối
$dbconn = null;

Tổng kết.

Như vậy mình đã trình bày xong làm sao có thể lấy được LAST_INSERT_ID trong MySQL sử dụng PHP. Hy vọng bài viết có ích cho các bạn.

0