レコードを登録後、登録したレコードに割り振られたID(主キー)を取得したいことがあります。PDOで登録したデータのIDを取得する方法を、MySQL、PostgreSQL、SQLiteの3種類のデータベースを使って紹介します。
Contents
INSERT文の基本とlastInsertIDの取得
$date = '20191014'; // SQLを作成 $sql = "INSERT INTO users ( name, age ) VALUES ( '田中', $date )"; // SQL実行(データ登録) $res = $dbh->query($sql); // 登録したデータのIDを取得して出力 var_dump($dbh->lastInsertId());
最初に登録したデータのIDを取得する方法から解説します。
PDOには元々lastInsertIdメソッドが用意されており、データ登録後にこのメソッドを呼び出すことでIDを取得することができます。
ここからは、MySQL、PostgreSQL、SQLiteのデータベースを使用してlastinsertidの取得の方法を紹介します。
MYSQLでのPDOを用いたLastinsertidの取得の仕方
<?php // 変数の初期化 & 日時の取得 $sql = null; $res = null; $dbh = null; try { // DBへ接続 $dbh = new PDO("mysql:host=127.0.0.1; dbname=test; charset=utf8", 'username', 'password'); // SQL作成 $sql = "INSERT INTO user_list ( name, age ) VALUES ( '田中', 35 )"; // SQL実行 $res = $dbh->query($sql); // 登録したデータのIDを取得して出力 var_dump($dbh->lastInsertId()); } catch(PDOException $e) { echo $e->getMessage(); die(); } // 接続を閉じる $dbh = null;
PostgreSQLでのPDOを用いたLastinsertidの取得の仕方
<?php // 変数の初期化 & 日時の取得 $sql = null; $res = null; $dbh = null; $date = date('Y-m-d H:i:s'); try { // DBへ接続 $dbh = new PDO("pgsql:host=127.0.0.1; dbname=test;", 'username', 'password'); // SQL作成 $sql = "INSERT INTO user_list ( name, age, ) VALUES ( 'テスト奈津子', 25 )"; // SQL実行 $res = $dbh->query($sql); // 登録したデータのIDを取得して出力 var_dump($dbh->lastInsertId()); } catch(PDOException $e) { echo $e->getMessage(); die(); } // 接続を閉じる $dbh = null;
PostgreSQにはMySQLの「AUTO_INCREMENT」属性はありませんが、代わりにSerialを指定することで自動連番のIDを設定することができます。
そのため、PostgreSQLでlastInsertIdメソッドを使うには、型が「Serial」の主キー(PRIMARY KEY)がカラムに存在している必要があります。
SQLiteでのPDOを用いたLastinsertidの取得の仕方
最後にSQLiteでlastinsertidを取得します。
<?php // 変数の初期化 & 日時の取得 $sql = null; $res = null; $dbh = null; try { // DBへ接続 $dbh = new PDO("sqlite:./sqlite/test.sqlite3"); // SQL作成 $sql = "INSERT INTO user_list ( name, age ) VALUES ( '田中', 25 )"; // SQL実行 $res = $dbh->query($sql); // 登録したデータのIDを取得して出力 var_dump($dbh->lastInsertId()); } catch(PDOException $e) { echo $e->getMessage(); die(); } // 接続を閉じる $dbh = null;
SQLiteでlastInsertIdメソッドを使用するには、整数型の主キーである「INTEGER PRIMARY KEY」を指定したカラムが必要になります。
カラム名には制限がありませんので、「id」などでなくても大丈夫です。
フレームワークを使用する場合
近年の開発ではフレームワークを使用してlastinsertidを取得するのが一般的だと思います。
様々なフレームワークを使用した際のlastinsertidの取得の方法についてのリンクを貼るので参考にしてください。