Làm cách nào tôi có thể lấy ID được chèn lần cuối trong PDO?

Bạn có thể thường thấy cần lấy giá trị ID tăng dần tự động cho một hàng mà bạn vừa chèn vào bảng cơ sở dữ liệu của mình. Bạn có thể đạt được điều này bằng phương thức lastInsertId[]

// 1. Basic connection opening [for MySQL]
$host = 'localhost';
$database = 'foo';
$user = 'root'
$password = '';
$dsn = "mysql:host=$host;dbname=$database;charset=utf8";
$pdo = new PDO[$dsn, $user, $password];

// 2. Inserting an entry in the hypothetical table 'foo_user'
$query = "INSERT INTO foo_user[pseudo, email] VALUES ['anonymous', 'anonymous@example.com']";
$query_success = $pdo->query[$query];

// 3. Retrieving the last inserted id
$id = $pdo->lastInsertId[]; // return value is an integer

Trong postgresql và oracle, có từ khóa RETURNING, trả về các cột được chỉ định của các hàng hiện được chèn/sửa đổi. Đây là ví dụ để chèn một mục nhập

$st = $pdo->prepare['INSERT INTO test SET name = :name'];
$st->execute[[':name' => 'Donald']];
$id = $pdo->lastInsertId[];ctrl + c
$pdo->prepare

chuẩn bị truy vấn đã cho để thực hiện

$st->execute[

chạy truy vấn trên máy chủ

$pdo->lastInsertId

sẽ trả về ID được chèn lần cuối của hàng mới [nếu đó là tự động tăng]


Đây là hướng dẫn ngắn về cách lấy ID của hàng được chèn cuối cùng bằng phương thức lastInsertId của PDO. Trong trường hợp bạn chưa biết, PDO là một tiện ích mở rộng PHP phổ biến cung cấp giao diện để truy cập cơ sở dữ liệu

Có nhiều lý do khiến bạn có thể cần truy xuất ID của hàng mà bạn vừa chèn. Ví dụ: nếu người dùng tạo một bài đăng blog mới, thì bạn có thể muốn chuyển hướng họ đến bài đăng blog đó sau khi nó được chèn thành công vào cơ sở dữ liệu

Trong ví dụ này, tôi đã tạo một bảng MySQL đơn giản có tên là bài viết. Cấu trúc của bảng này trông như vậy

CREATE TABLE IF NOT EXISTS `posts` [
  `id` int[10] unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar[255] COLLATE utf8_unicode_ci NOT NULL,
  `body` text COLLATE utf8_unicode_ci NOT NULL,
  `date_posted` datetime NOT NULL,
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

Như bạn có thể thấy, nó không có gì đặc biệt

Trong ví dụ sau, tôi sẽ chèn một số dữ liệu vào bảng này trước khi lấy ID của hàng được chèn cuối cùng

//Connect to MySQL and instantiate our PDO object.
$pdo = new PDO["mysql:host=$dbServer;dbname=$dbName", $dbUser, $dbPassword];

//Create our SQL statement, which inserts data into 
//our posts table.
$insertSql = "
    INSERT INTO `posts` 
      [`title`, `body`, `date_posted`]
    VALUES
      [:title, :body, :date_posted]
";

//Prepare our SQL statement.
$statement = $pdo->prepare[$insertSql];

//Execute the SQL statement.
$statement->execute[array[
    "title" => 'Test post!',
    "body" => 'This is just a test!',
    "date_posted" => date["Y-m-d H:i:s"]
]];

//Get the ID of the last inserted row by using
//the PDO::lastInsertId method.
$id = $pdo->lastInsertId[];

//Print out the result for example purposes.
echo 'The ID of the last inserted row was: ' . $id;

Trong mẫu mã PHP ở trên, chúng tôi

  1. Đã kết nối với MySQL bằng tiện ích mở rộng PDO
  2. Chúng tôi đã chèn một hàng mới vào bảng của mình bằng cách sử dụng các câu lệnh đã chuẩn bị
  3. Chúng tôi đã truy xuất ID của hàng được chèn cuối cùng bằng cách sử dụng phương thức lastInsertId của PDO
  4. Cuối cùng, chúng tôi đã in ra ID cho các mục đích ví dụ

Sử dụng lastInsertId với các giao dịch

Nếu bạn đang sử dụng các giao dịch cơ sở dữ liệu với phần mở rộng PDO, hãy cảnh báo rằng bạn sẽ cần gọi phương thức lastInsertId TRƯỚC KHI bạn thực hiện các thay đổi. Nếu bạn cố lấy ID của hàng được chèn cuối cùng sau khi bạn đã thực hiện các thay đổi, thì bạn sẽ nhận được giá trị '0'

Đây là cách sử dụng lastInsertId với các giao dịch

try{
    $pdo->beginTransaction[];
    $insertSql = "
        INSERT INTO `posts` 
          [`title`, `body`, `date_posted`]
        VALUES
          [:title, :body, :date_posted]
    ";
    $statement = $pdo->prepare[$insertSql];
    $statement->execute[array[
        "title" => 'Transaction example.',
        "body" => 'Inserting this inside a transaction!',
        "date_posted" => date["Y-m-d H:i:s"]
    ]];
    $id = $pdo->lastInsertId[];
    $pdo->commit[];
    echo 'The ID of the last inserted row was: ' . $id;
}
catch[Exception $e]{
    echo $e->getMessage[];
    $pdo->rollBack[];
}

Như bạn có thể thấy, chúng tôi đã gọi phương thức lastInsertId trước khi chúng tôi thực hiện các thay đổi của mình. Nếu bạn thay đổi mã ở trên và gọi lastInsertId sau khi bạn đã thực hiện các thay đổi, thì kết quả sẽ như sau

MySQL có thuộc tính cột AUTO_INCREMENT tự động tạo giá trị số nguyên nhất quán khi thành công [hoặc không] INSERT. Thông thường, thuộc tính này được đặt trên một cột được coi là

$st = $pdo->prepare['INSERT INTO test SET name = :name'];
$st->execute[[':name' => 'Donald']];
$id = $pdo->lastInsertId[];ctrl + c
0. Do đó, việc cung cấp một giá trị duy nhất cho cột và đảm bảo nhận dạng riêng của từng hàng. Hàm
$st = $pdo->prepare['INSERT INTO test SET name = :name'];
$st->execute[[':name' => 'Donald']];
$id = $pdo->lastInsertId[];ctrl + c
1 trả về giá trị được tạo gần đây nhất cho một cột có thuộc tính AUTO_INCREMENT. Nhiều lần, bạn sử dụng thêm giá trị này trong quá trình xử lý truy vấn [E. g. , liên kết thông tin của khách hàng mới đăng nhập với bảng tham gia đơn đặt hàng, đảm bảo…

Hàm nào sau đây được sử dụng để lấy ID được chèn lần cuối?

1. mysqli_insert_id[] Nó trả về giá trị cột AUTO_INCREMENT cuối cùng của truy vấn chèn đã thực hiện thành công trước đó.

Làm cách nào để lấy bản ghi được chèn lần cuối trong SQL Server?

Xác định bản ghi được chèn lần cuối trong SQL Server .
CHỌN @@ IDENTITY. Nó trả về giá trị IDENTITY cuối cùng được tạo trên một kết nối, bất kể bảng tạo ra giá trị và phạm vi của câu lệnh tạo ra giá trị. .
CHỌN PHẠM VI_IDENTITY[].
CHỌN IDENT_CURRENT['Tên bảng']

Làm cách nào để lấy id chèn cuối cùng trong laravel?

Phương thức insertGetId[] trả về id được chèn cuối cùng từ bảng.

Làm cách nào tôi có thể nhận ID chèn mới?

Để lấy ID của bản ghi được chèn lần cuối, bạn có thể sử dụng T-SQL này. CHÈN VÀO NGƯỜI [Tên] GIÁ TRỊ ['Joe']; CHỌN ID LÀ LastID TỪ Người Ở ĐÂU ID = @@Identity; You can use query like this inside stored procedure or as an ad-hoc query.

Chủ Đề