• ベストアンサー

PDOのlastInsertIDについて

PDOのlastInsertIdって、データベースに挿入された最後のidを取得出来るらしいのですが 1つのテーブルにバンバンinsertされるようなプログラムがあった場合 そのプログラム内でlastInsertIdを使うと、「そのプログラムで最後に挿入されたid」を返してくれるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

使っているRDBMSが「自動インクリメントフィールド、 もしくはシーケンスの概念をサポートしていれば」使えます(ドライバにも依存しますが、サポートしているRDBMS用のドライバでこれが欠落することは一般的には「ない」ので)。 http://php.net/manual/ja/pdo.lastinsertid.php (当然ですが)phpでよく使うMySQLやPostgreSQLでは問題ありません(マニュアルに記載のとおり、PostgreSQLでは引数でシーケンスオブジェクト名の指定が必須になります)。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

PDOはデータベースへアクセスする汎用のモジュールです。 質問者さんがどのデータベースを想定しているか書いていないので なんともいえませんが、MySQLなのかPostgreなのかまたは全然別のRDBなのか によって挙動がことなり、画一的な動作は保証されないということでしょう。 またMySQLのようにDBエンジンに選択肢があるものも、そのエンジンによって 挙動がことなってくる可能性はあります。 ご利用のDBの特徴を理解したうえで運用されることが賢明です http://php.net/manual/ja/pdo.drivers.php

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>http://php.net/manual/ja/pdo.lastinsertid.php を見る限り、「このメソッドは、異なる PDO ドライバ間で意味のあるもしくは 一貫性のある結果を返さないかも知れません」 とあるので、必ずしも最後のデータではない可能性はあります。 きちんとやるなら、データを挿入する際にプライマリもしくはユニークなデータを保持しておき、 データ挿入後、 select idとなるカラム from テーブル where ユニークなカラム=該当データ で拾うのが妥当でしょう。 ただ、そもそもlastinsertidの使い道はかなり限定されているので、あまり利用する価値は ないと思いますが・・・

simizukiyo
質問者

補足

ご回答ありがとうございました。 ご提案していただいた方法で実装してみたいと思います。 ところで、大変無知でこんな事を聞くのもお恥ずかしいのですが、「このメソッドは、異なる PDO ドライバ間で意味のあるもしくは 一貫性のある結果を返さないかも知れません」とありますが、「PDOドライバ」とは何者なのでしょうか。

関連するQ&A