php+MySQLでテーブルの行を追加するときに、自動生成された主キーを特定したい。
テーブルの行が追加されると、主キーを自動でインクリメントさせるようにしています。
行を追加したその場で、その行の主キーを取得したと思っています。
今回、複数のユーザーを管理するシステムだと仮定して、
以下のようなテーブルを作成しました。
以下は、主キーを特定するプログラムを自分なりにつくってみたものです。
<?php
// POST受け取り
$name = $_POST['name'];
$birthday = $_POST['birthday'];
// データベースサーバーに接続
$dbc = connectDb();
$dbc->query('SET NAMES utf8');
// データを追加
$stmt = $dbc->prepare("INSERT INTO user(name,birthday) VALUES(:name,:birthday);");
$stmt->bindParam(':name',$name,PDO::PARAM_STR);
$stmt->bindParam(':birthday',$birthday,PDO::PARAM_STR);
$stmt->execute();
// name,birthdayを使って、今回追加されたデータのcodeを特定
$stmt2 = $dbc->prepare("SELECT * FROM user WHERE name=:name AND birthday=:birthday;");
$stmt2->bindParam(':name',$name,PDO::PARAM_STR);
$stmt2->bindParam(':birthday',$birthday,PDO::PARAM_STR);
$stmt2->execute();
while ($row = $stmt2->fetch(PDO::FETCH_ASSOC)) {
echo $row['code'];
}
// データベース切断
$dbc=null;
function connectDb() {
try {
$dsn = 'mysql:host=xxx;dbname=xxx';
$user = 'xxx';
$password = 'xxx';
$db = new PDO($dsn,$user,$password);
return $db;
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
}
このプログラムを用いれば、たしかに追加した行の主キーを取得することができるのですが、
データベースで名前、誕生日が重複していれば、複数の主キーを取得してしまうという欠点があります。 もっと簡単に、主キーを特定する方法は無いのでしょうか?
データベース詳しい方ご教示ください。