直近にインサートしたレコードの auto_increment カラムの値を取得するために、mysql_insert_id() の代替となるメソッドを PEAR::DB で探してみたのですが、ありません。
PEAR::DB 的には DB::nextId() で値を取得してからインサートするようですが…うーん。ということで、以下のようなコードで代替しました。
function get_insert_id($db) { $query = "SELECT LAST_INSERT_ID() AS id"; $stt = $db->prepare($query); $rs = $db->execute($stt); $row = $rs->fetchRow(DB_FETCHMODE_ASSOC); return $row["id"]; }
取得できる auto_increment カラムの値については、以下のようにクライアントごとに保持されます。
生成された ID は、接続ベースで サーバ内で保持されます。つまり、関数によって指定のクライアントに戻された値は、そのクライアントによって AUTO_INCREMENT カラムに影響を及ぼす最も最近のステートメントのために生成された、最初の AUTO_INCREMENT 値です。この値は、他のクライアントが独自の AUTO_INCREMENT 値を生成した場合でも、他のクライアントによって影響を受けることはありません。この動作は、各クライアントが他のクライアントの動向を気にせず、ロックやトランザクションなしで、独自の ID を呼び出せるようにします。
ただし、MySQL 5.1.11 以前と MySQL 5.1.12 以降では挙動が違うので注意。