[PHP] データベースへ直近に挿入されたIDを取得する方法


どうも。fujinyoです。
今日は電車で割り込みされそうになりました。

データベース(以下、DB)を使って開発をしていると、DBの特定のカラムに、AUTO_INCREMENTを使用して連番として設定したりしますよね。ユーザーIDとか。
インサートした場合に、その連番ID(AUTO_INCREMENTカラム)が必要になる場合があります。

そういう時はこんな関数があります。
データベースは MySQL を使っています。

mysql_insert_id
直近のクエリ (通常は INSERT) により AUTO_INCREMENT カラム用に生成された ID を取得します。

サンプルコードはこんな感じ。

//直近に挿入されたIDを取得
$id = mysql_insert_id();

これを使ってみて取得できた場合はそれでいいのですが、僕の場合はなぜか取得できませんでした。
トランザクションを使用していて、コミットしていない状態では取得できないのかと思い mysql_insert_id を使う直前に
コミットさせてみたのですが、これでもダメでした。

と、言うことで他の方法を探す事にしました。
僕はPHPでDBを扱う時に、PEAR::MDB2を利用しています。
ということで、MDB2のメソッドに似たようなものがないかと調べると・・・ありました!

lastInsertID()
AUTO_INCREMENT を使用するほうがお好みなら、 lastInsertID() メソッドを使用して 直近に作成された値を取得するという方法もあります。

コードはこんな感じになります。

$tableName = '取得対象のテーブル名';
$columnName = '取得対象のカラム名';

//直近に挿入されたIDを取得
//既に $mdb2 というPEAR::MDB2オブジェクトが生成されている前提
$id = $mdb2->lastInsertId($tableName, $columnName);

このような形で、直近に挿入されたIDを取得する事ができます。
僕みたいに、 mysql_insert_id でうまくいかなくなった場合は、lastInsertId も試してみてください。

では、また。

[PR] 「結さん」があなたに代わって開発案件の依頼主を探します

  • 「既存のクライアントにギャラアップは言いにくい」
  • 「営業活動する時間がないし、苦手」
  • 「仕事が途切れたらどうしよう」

ITエンジニアのこんな悩みを「結さん」が解決してくれます
結さんへの無料会員登録後は提案メールを待つだけです!

関連記事