AppSeedのアプリ開発ブログ

アプリ開発会社AppSeed(アップシード)開発担当のブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsや備忘録、アプリ開発に役立つ情報を発信します。

【PHP】DBに追加したレコードのプライマリーキーをすぐに取得する方法

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcScS4wA_hHDvXFFZ3TjpEzxjO8fTpH39SDiNRpr17PhmIdfKgGDgA


PHPでDBに追加したレコードのプライマリーキーを取得する場合のメモ。


DBへのレコード追加直後にレコードを取得しようとするとPDOExceptionが発生する


サーバー側のAPI開発で、DBに追加したレコードをクライアントへ返す実装をしたいと思ったのですが、

PDOException: SQLSTATE[HY000]: General error

上記のようなエラーが出てしまいました。

調べた感じだとDBに追加したレコードをすぐに取得しようとすると発生するエラーなのかなと思います。



PDOのlastInsertId()を使えばレコード追加したプライマリーキーを取得できる


PDOのlastInsertId()を使用すれば、追加したレコードのプライマリーキーを取得できるので、
追加したレコードの情報をクライアントへ返却できそうです。


	$user_id = '1';
	$user_name='user';
	
	$dsn='mysql:dbname=app;host=localhost;charset=utf8';
	$user='dbuser';
	$password='';
	$dbh=new PDO($dsn,$user,$password);
	$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
	$sql='INSERT INTO user(user_id,name) VALUES(?,?)';
	$stmt=$dbh->prepare($sql);
	$data[]=$user_id;
	$data[]=$user_name;
	$stmt->execute($data);
	$user_code = $dbh->lastInsertId(); //追加したレコードのプライマリーキーを取得
	$dbh= null;