MySQLメモ020:INSERT後にAUTO_INCREMENTなカラムの値を取得する方法(PDO編)
関連記事:
MySQLメモ013:INSERT後にAUTO_INCREMENTなカラムの値を取得する方法
大分前にJava+MySQLでAUTO_INCREMENTな列の値をINSERT後に取得する方法について記事を書いた。
今、仕事はPHPばかりなので、PHPでのやり方についてメモ。
列idがPKでAUTO_INCREMENTだとして、以下のようなidの指定を省略したINSERT文を実行する。
INSERT INTO test_tbl_01 (name) VALUES ('テスト名前')
これにより作成されたレコードのidを取得する。
最初はINSERTの直後に LAST_INSERT_ID() を使って
SELECT LAST_INSERT_ID() AS last_id
を実行していた。しかし、やりたいのはINSERTだけなのにSQLを2回発行するのは面倒くさい。
他の方法がないか調べるとPDOクラスの lastInsertId() というメソッドがを見つけた。
サンプルコードは以下。Windows7+Apache2.2+PHP5.3.29で動作を確認した。
$dsn = 'mysql:host=localhost;dbname=test_db;charset=utf8'; $username = 'username'; $password = 'password'; // PHP5.3.6より前 //$options = array( // PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', //); try { $db = new PDO($dsn, $username, $password); // $db = new PDO($dsn, $username, $password, $options); // PHP5.3.6より前 // $db->beginTransaction(); // トランザクション開始 $sql = 'INSERT INTO test_tbl_01 (name) VALUES (?)'; $stmt = $db->prepare($sql); $stmt->execute(array('テスト氏名')); $last_id = $db->lastInsertId(); print("id={$last_id}\n"); // $db->commit(); // トランザクション終了 } catch (PDOException $e) { exit('DBエラー:' . $e->getMessage()); }
トランザクション内で使わなければならないということを書いてあるサイトもあったが、オートコミットモードでも問題なく使用できた。
参考ページ:
PHP: PDO_MYSQL DSN - Manual
PHPでPDOを使ってMySQLに接続、INSERT、UPDATE、DELETE、COUNT、SUM - Qiita
select last_insert_id() - MySQL初心者日記 - MySQLグループ
PHP: PDO::lastInsertId - Manual
select last_insert_id() - MySQL初心者日記 - MySQLグループ
PDOを利用して、last insert idを取得する -でじうぃき
« MySQLメモ019:TIMESTAMP型の列には勝手にNOT NULL制約とDEFAULT制約が付く | Main | [CentOS 6.6]PHP5.5のインストール準備(EPEL、REMIリポジトリの追加) »
「PHP」カテゴリの記事
- PHPStorm 2018.1.7 に更新(2018.12.09)
- PHPメモ051:includeとrequireの使い分け(2015.06.19)
- CakePHPのインストール(2015.06.14)
- PHPからPDOでPostgreSQLに接続する(2015.06.09)
- PHPでメールを送信したら一部のOutlookで受信したメールでヘッダがおかしくなった(2015.05.31)
「MySQL」カテゴリの記事
- MySQLメモ020:INSERT後にAUTO_INCREMENTなカラムの値を取得する方法(PDO編)(2015.02.14)
- MySQLメモ019:TIMESTAMP型の列には勝手にNOT NULL制約とDEFAULT制約が付く(2015.02.12)
- MySQLメモ018:MySQL WorkbenchでTRUNCATEできるようにする(2015.02.11)
- MySQLメモ017:CREATE文、AUTO_INCREMENT、ENGINE(2015.02.08)
- SQLインジェクション その7(2013.10.14)
The comments to this entry are closed.
TrackBack
Listed below are links to weblogs that reference MySQLメモ020:INSERT後にAUTO_INCREMENTなカラムの値を取得する方法(PDO編):
« MySQLメモ019:TIMESTAMP型の列には勝手にNOT NULL制約とDEFAULT制約が付く | Main | [CentOS 6.6]PHP5.5のインストール準備(EPEL、REMIリポジトリの追加) »
Comments