[PHP-users 15197]Re: PEARDBでmysql_insert_id()と同じメソッドは?
yuji koga
koga-y @ mcp-net.com
2003年 5月 12日 (月) 16:44:19 JST
お世話になります。古賀です。
Seto様、レス有り難う御座いました。
> MySQLでは Insertした最後のIDを簡単に入手できますが
> たとえばPostgreSQLでは 最後のIDを直接入手する方法がなく
> OIDを取得してから そのレコードのPrimaryKeyを
> 入手することになると思います。
> しかしそれでは、手間がかかるのと
> 汎用的にPrimaryKeyのフィールド名を決めようとすると
> 更なる手間となると思います。(固定しちゃえば簡単ですが)
>
> 何が言いたいのかと言うとDB::nextid() を使用したほうが
> PEARらしいのでは?という気がするのです。
なるほどです。仰っている意味は、おそらく
「せっかくデータベースの種類にかかわらず
統一して使えるPEAR DBが用意されたのに、
そこにmySQLにしかない機能を入れるのは、
本末転倒である」
ということなのでしょう。自分も、おそらく同じ結論に達しようとしています。
自分も、先ほど
>>> SELECT LAST_INSERT_ID()
>>> のようなクエリを実行することで解決できるかもしれません。
>> この処理を、DB->LAST_INSERT_ID()みたいなメソッドとして
>> DBクラスを継承したユーザー定義クラスに埋め込もうと思います。
と発言してから、一度それを作ったあと、
「SELECT LAST_INSERT_ID() って、他のDBと互換あるのかな?」
と酷く心配になりました。
なにぶん勉強不足なので、他(mySQL以外)を知らず、
これから調べてみようかナ?と思い、手っ取り早い方法として、
PEAR DBのソースを調べていた所でした。
すると、pear/DB/mysql.phpでは、DB::nextid()の定義の中で
$result = $this->query("UPDATE ${seqname} ".
'SET id=LAST_INSERT_ID(id+1)');
となっているか所が、pear/DB/pgsql.phpでは同じか所で
$result = $this->query("SELECT NEXTVAL('${seqname}')");
となっているではありませんか!
これを見て、LAST_INSERT_ID()が
mySQLローカルであることを予感しました。。。。
少し、考えを整理し直したいと思います。
<? /*
株式会社メディアプレス 制作課 古賀裕二
会社:koga-y @ mcp-net.com
自宅:yuuukunn @ h7.dion.ne.jp
*/ ?>
PHP-users メーリングリストの案内