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é.

Nội dung chính

  • 1. Lấy ID vừa insert bằng PHP
    • Trường hợp MySQLi Object-oriented:
    • Trường hợp MySQLi Procedural:
    • Trường hợp PDO:
  • 2. Lời kết

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().

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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.

30 BÌNH LUẬN

  1. With havin so much content and articles do you ever run into any
    issues of plagorism or copyright violation? My website has a lot of exclusive content I’ve
    either created myself or outsourced but it looks like a lot
    of it is popping it up all over the internet without
    my agreement. Do you know any ways to help stop content from being
    stolen? I’d really appreciate it.

  2. Excellent goods from you, man. I have be mindful your stuff prior to and
    you’re simply extremely fantastic. I really
    like what you’ve received here, really like what you’re stating and the
    best way in which you are saying it. You’re making it enjoyable and you continue
    to take care of to stay it sensible. I can not
    wait to learn far more from you. That is really a wonderful website.

  3. Hi there! I realize this is kind of off-topic however I needed to ask.
    Does managing a well-established website like yours require a massive amount work?
    I’m brand new to operating a blog however I do write in my journal
    daily. I’d like to start a blog so I can share my experience and views online.
    Please let me know if you have any kind of ideas or tips for new aspiring blog owners.
    Appreciate it!

  4. Your style is very unique in comparison to other people I’ve read stuff from.
    Many thanks for posting when you have the opportunity, Guess I’ll just bookmark this web site.

  5. Good way of explaining, and pleasant post to obtain facts on the topic of my
    presentation topic, which i am going to deliver in institution of higher education.

  6. Hello, I think your site might be having browser compatibility issues.
    Whenever I look at your web site in Safari, it looks fine however, if opening in Internet Explorer, it
    has some overlapping issues. I just wanted to give you
    a quick heads up! Apart from that, fantastic website!

  7. Hi there! This blog post could not be written much
    better! Looking at this post reminds me of my previous roommate!
    He constantly kept talking about this. I will send
    this information to him. Fairly certain he’ll have a great
    read. I appreciate you for sharing!

  8. After looking over a few of the articles on your web site, I really like your
    way of writing a blog. I saved as a favorite it to my bookmark site list and
    will be checking back in the near future. Take a look
    at my web site too and tell me what you think.

THOÁT KHỎI BÌNH LUẬN

Please enter your comment!
Please enter your name here