PDOを使ってMySQLの複数テーブルにデータを挿入する処理を例とする。

orderテーブルと、order_detailテーブルに対しそれぞれデータを挿入するのだが、トランザクション内で二つの処理を同時におこなわなければならない。

まず、orderテーブルに注文情報を書き込み、続いてorder_detailテーブルに注文明細などを書き込みにいく。
この時、二つのテーブルを紐付けるorder_idをorder_detailテーブルにも書き込む必要がある。
※orderテーブルのorder_idはオートインクリメントで管理

ここまでの流れを整理すると次のとおりとなる。

  1. orderテーブルへINSERT文実行
  2. 1でINSERTしたレコードのorder_idを取得
  3. order_detailテーブルへINSERT文実行

今回は「2」の、たったいまINSERT文を実行して挿入したデータのオートインクリメント値を取得する方法を紹介する。

lastInsertId()メソッド

まず、PDOを使ってINSERT文を実行する。

$pdo = new PDO($dsn, USER, PASSWORD);

$sql = "INSERT INTO order ......";
$res = $pdo->query($sql);

次にPDOのlastInsertId()メソッドを実行することで、上記のINSERT文で挿入したレコードのオートインクリメント値を取得することができる。

$orderId = $pdo->lastInsertId();

あとは、ここで取得した$orderIdを使って、order_detailテーブルへINSERT文を実行すればOKだ。