12378


テーブルの行が追加されると、主キーを自動でインクリメントさせるようにしています。  
行を追加したその場で、その行の主キーを取得したと思っています。

今回、複数のユーザーを管理するシステムだと仮定して、  
以下のようなテーブルを作成しました。  
![user](https://i.stack.imgur.com/iEFmY.png)  
以下は、主キーを特定するプログラムを自分なりにつくってみたものです。

[code]

    <?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;
        }
    }
    
[/code]

このプログラムを用いれば、たしかに追加した行の主キーを取得することができるのですが、  
**データベースで名前、誕生日が重複していれば、複数の主キーを取得してしまうという欠点があります。**
もっと簡単に、主キーを特定する方法は無いのでしょうか？  
データベース詳しい方ご教示ください。


CC BY-SA 3.0
2015-07-15T08:03:49.967
12377
2015-07-15T08:39:01.507
2015-07-15T08:32:20.680
7699
7699
question
php mysql
php+MySQLでテーブルの行を追加するときに、自動生成された主キーを特定したい。

[code]

    mysql_insert_id($db)
    
[/code]

でできませんか？？


CC BY-SA 3.0
2015-07-15T08:39:01.507
12378
2015-07-15T08:39:01.507
8044
12377
answer