How to get the last inserted record on a table with pdo_mysql?
PHPでPDOを使って最後に挿入されたIDを取得する方法
PHPでPDOを使ってデータベースにデータを挿入した後、最後に挿入された行のIDを取得するには、PDO::lastInsertId()
メソッドを使用します。
PDO::lastInsertId() メソッド
PDO::lastInsertId()
メソッドは、最後に挿入された行のID、あるいはシーケンスオブジェクトから次の値を返します。これは、構成しているドライバに依存します。
使用方法
PDO::lastInsertId()
メソッドは、以下の2つの方法で使用できます。
- パラメータなし
パラメータなしで呼び出すと、最後に挿入された行のIDが返されます。
$pdo = new PDO(...);
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$name, $email]);
$lastInsertedId = $pdo->lastInsertId();
パラメータにシーケンスオブジェクト名を指定すると、指定されたシーケンスオブジェクトから取得した最後の値が返されます。
$pdo = new PDO(...);
$stmt = $pdo->prepare("SELECT nextval('users_id_seq')");
$stmt->execute();
$lastInsertedId = $pdo->lastInsertId('users_id_seq');
注意事項
PDO::lastInsertId()
メソッドは、異なるPDOドライバ間で意味のあるもしくは一貫性のある結果を返さない場合があります。- 構成しているデータベースが自動インクリメントフィールド、もしくはシーケンスの概念をサポートしていない場合があります。
<?php
// データベースへの接続
$pdo = new PDO(...);
// ユーザー情報の挿入
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$name, $email]);
// 最後に挿入されたIDを取得
$lastInsertedId = $pdo->lastInsertId();
// 結果を出力
echo "最後に挿入されたID: $lastInsertedId";
?>
users テーブル
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
);
実行例
$ php index.php
最後に挿入されたID: 1
- 上記のコードは、MySQLデータベースを使用しています。
name
とemail
は、ユーザーが入力した値に置き換えてください。
MySQLi
MySQLiを使用している場合は、mysqli_insert_id()
関数を使用して最後に挿入されたIDを取得できます。
<?php
// データベースへの接続
$mysqli = new mysqli(...);
// ユーザー情報の挿入
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$name, $email]);
// 最後に挿入されたIDを取得
$lastInsertedId = $mysqli->insert_id;
// 結果を出力
echo "最後に挿入されたID: $lastInsertedId";
?>
シーケンス
データベースがシーケンスをサポートしている場合は、シーケンスを使用して最後に挿入されたIDを取得できます。
例: PostgreSQL
INSERT INTO users (name, email) VALUES (?, ?) RETURNING id;
上記の場合、RETURNING id
句によって、挿入された行の id
が返されます。
トリガー
トリガーを使用して、挿入後にIDを取得することもできます。
例: MySQL
CREATE TRIGGER after_insert_user
AFTER INSERT ON users
FOR EACH ROW
BEGIN
SELECT LAST_INSERT_ID() INTO @last_inserted_id;
END;
上記の場合、after_insert_user
トリガーは、users
テーブルにデータが挿入されるたびに実行されます。トリガーは LAST_INSERT_ID()
関数を使用して最後に挿入されたIDを取得し、@last_inserted_id
変数に格納します。
- 上記の方法は、使用しているデータベースによって異なります。
- シーケンスやトリガーの使用には、データベースの知識が必要となります。
php mysql database