dポイントプレゼントキャンペーン実施中!

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

A 回答 (3件)

使っているRDBMSが「自動インクリメントフィールド、 もしくはシーケンスの概念をサポートしていれば」使えます(ドライバにも依存しますが、サポートしているRDBMS用のドライバでこれが欠落することは一般的には「ない」ので)。



http://php.net/manual/ja/pdo.lastinsertid.php

(当然ですが)phpでよく使うMySQLやPostgreSQLでは問題ありません(マニュアルに記載のとおり、PostgreSQLでは引数でシーケンスオブジェクト名の指定が必須になります)。
    • good
    • 0

PDOはデータベースへアクセスする汎用のモジュールです。


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

http://php.net/manual/ja/pdo.drivers.php
    • good
    • 0

>

http://php.net/manual/ja/pdo.lastinsertid.php

を見る限り、「このメソッドは、異なる PDO ドライバ間で意味のあるもしくは 一貫性のある結果を返さないかも知れません」
とあるので、必ずしも最後のデータではない可能性はあります。
きちんとやるなら、データを挿入する際にプライマリもしくはユニークなデータを保持しておき、
データ挿入後、
select idとなるカラム from テーブル where ユニークなカラム=該当データ
で拾うのが妥当でしょう。

ただ、そもそもlastinsertidの使い道はかなり限定されているので、あまり利用する価値は
ないと思いますが・・・

この回答への補足

ご回答ありがとうございました。

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

補足日時:2013/01/07 13:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!