人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PEAR::DBで、直前のinsertでauto incrementされたseqを取得するのは、どうやって行うのでしょうか?

●質問者: takeuchi_k
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB Pear
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ●
●60ポイント

「直前のinsertでauto increment」というのはnextId()を使って行うauto incrementのことですよね。

SEQUENCEの現在値を取得する方法はPEAR::DBでは提供されていないようです。

(nextID()が実装できるのであれば、currID()などという関数で実装できそうな気がしますが…。)

直前でINSERTしたtableの列のMAXを取得することで代用できないでしょうか。

nextId()のサンプル「Example 33-1. Using nextId()」のようにauto incrementした場合、以下のようにMAXでidの最大値を取得すれば良いと思います。

(パラレルに多数の処理が実行され、INSERTとMAXを取得するSELECTの間に別のINSERTが入ってしまうと、正しい値を取得できませんのでご注意ください。)

$res =& $db->query('SELECT MAX(id) FROM myTable');

以下、参考情報です。

PostgreSQLやOracleではSEQUENCEを使えるので、CURRVAL擬似列を使えばSEQUENCEの現在値を求められますが、MySQLの場合はSEQUENCEの機能が存在しないので、SEQUENCE用にauto_incrementの列を持ったテーブルを作り、nextIDはLAST_INSERT_ID+1を使っています。auto_incrementの機能もない場合(ODBCなど)、integerの列にidという項目の値をUPDATEでid=id+1しています。

◎質問者からの返答

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ