web-dev-qa-db-ja.com

DBIを使用して挿入した最後の行をフェッチするにはどうすればよいですか?

[〜#〜] dbi [〜#〜]DBD :: mysql )を使用して挿入された最後の行をフェッチするにはどうすればよいですか?

コードサンプル:

my $sth = $dbh->prepare('INSERT INTO a ( x, y, z ) VALUES ( ?, ?, ? )');
$sth->execute( $x, $y, $z );

上記のprepareステートメントによって挿入されたデータにアクセスするにはどうすればよいですか?プライマリID(AUTOINCREMENT)の値を取得する必要があります。

UPDATE:

DBD :: mysql のドキュメントから:

この属性にアクセスする別の方法は、$dbh->{'mysql_insertid'}を使用することです。

Manni および n0rd 回答ありがとうございます。 :-)

34

これはステートメントハンドルのプロパティです。そのようなIDにアクセスできるはずです。

$sth->{mysql_insertid}
31
innaM

データベースにとらわれないアプローチは [〜#〜] dbi [〜#〜]_last_insert_id_ メソッドを使用することです。このアプローチは、特定のデータベースへの依存を減らすのに役立ちます。

$ dbh-> last_insert_id

$rv = $dbh->last_insert_id($catalog, $schema, $table, $field);

可能であれば、挿入されたばかりの行を「識別する」値を返します。通常、これはデータベースサーバーによってauto_incrementまたはシリアルタイプの列に割り当てられた値です。ドライバがメソッドをサポートしていない場合、または値を判別できない場合は、undefを返します。

28
Graham Miln

SELECT LAST_INSERT_ID()query も必要なものを返します。

6
n0rd