直近にインサートしたレコードの 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 以降では挙動が違うので注意。
