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

Perl にてMySQLを利用しています。

以下のプログラムですが、、、

# データベースにつなぐ
$dbh = DBI->connect( $DB, $DBUSER, $DBPASS,{AutoCommit => 0} ) || print $DBI::errstr . "\n";

# SJISの使用を宣言
$sth = $dbh->prepare( "SET NAMES 'sjis'" );
$sth->execute();

$sth = $dbh->prepare( "INSERT INTO `db_01` ( data1, data2 ) VALUES ( $data1, $data2 )" );

$sth->execute();

# 切断
$dbh->disconnect();

というプログラムを組みました。DBにはフィールドが3つあり、(id,data1,data2)になっています。idはauto_incrementで自動的に数値が増えていくようになっています。

上記のプログラムでは書き込んだ瞬間、idはMySQLが勝手に決めてくれるのですが、その書き込んだ時にidの数値はいくつなのか調べる方法はないでしょうか?

一度、DBを切断してから調べなければならないのでしょうか?

●質問者: zachouR
●カテゴリ:インターネット ウェブ制作
✍キーワード:CONNECT DB DBI MySQL Perl
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● y-kawaz
●27ポイント

多分、$sth->execute(); の後に以下のようにすることでidの値が取得できると思います。

$id = $sth->{mysql_insertid};

mysql_insertid は最新の AUTO_INCREMENT 値を返す DBI の MySQL 実装L固有の属性です。

http://dev.mysql.com/doc/refman/4.1/ja/perl-dbi-class.html

◎質問者からの返答

ありがとうございます。これで、かなり楽になりました。

というのも、書き込んだ後にIDを調べても良かったのですが、もしその微妙なタイミングで別の人が書き込んでしまったとき、ちょっとまずい事になりそうだったので、即座にIDを取得したかったのです。


2 ● y-kawaz
●27ポイント

多分、$sth->execute(); の後に以下のようにすることでidの値が取得できると思います。

$id = $sth->{mysql_insertid};

mysql_insertid は最新の AUTO_INCREMENT 値を返す DBI の MySQL 実装L固有の属性です。

http://dev.mysql.com/doc/refman/4.1/ja/perl-dbi-class.html

◎質問者からの返答

ありがとうございます。これで、かなり楽になりました。

というのも、書き込んだ後にIDを調べても良かったのですが、もしその微妙なタイミングで別の人が書き込んでしまったとき、ちょっとまずい事になりそうだったので、即座にIDを取得したかったのです。


3 ● chuken_kenkou
●26ポイント

LAST_INSERT_ID()等は、「自分が追加した最新のID」を返します。

他人が追加したものを含め、最新の値を得るには、

「select max(id) from ?」

といったSQLを実行するしかありません。

「最大値を得てから+1するまでの間に、他人に追加される」ことは、LOCK TABLE等を使って表を占有

しなければ、当然、あり得ます。

こういった操作を楽にするのが、auto_incrementの機能なのであり、DB全体の最大値を利用者側が

調べなくても自動的に最大値+1してくれます。

「最新値を知って+1する」というのは、auto_incrementを使っていれば不要な操作であり、そのような

操作をしたいなら、「auto_incrementを使うべきではない」ということになります。

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 3.6.9 AUTO_INCREMENT の使用

◎質問者からの返答

ありがとうございます。返事が遅くなりまして、すいません。

ということは、途中で他社による+1?の増減はない、と考えてプログラムを組みたいと思います。

「自分が入力した最新のID」を取得したいだけなので、LAST_INSERT_ID() をさっそく使ってみます。

助かりました。

関連質問


●質問をもっと探す●



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