- 2007/12/06
- MySQL PostgreSQL | PHP
MySQLでテーブルのキーとなるカラムをAUTO_INCREMENTにするのはよくある事で、データをInsertしてから、InsertしたレコードのAUTO_INCREMENT値を取得したいというのもよくある事で、どうやるのが一番ベストか悩んだ時期がありました。
どうやるか。
方法としては2つあり、PHPの関数 mysql_insert_id() で取得する方法と、MySQLの関数 last_insert_id() で取得する方法があります。
PHP:mysql_insert_id()
$query = 'insert into table_name ...'; $result = mysql_query($query); $last_id = mysql_insert_id();
直近で実行された Insert 文を対象にAUTO_INCREMENT値を返してくれます。非常に簡単。
ただし、カラムの型がBIGINTの場合は、無理矢理 int に変換された値を返すため、MySQLの関数を使う必要があります。要注意。
MySQL:last_insert_id()
$query = 'insert into table_name ...'; $result = mysql_query($query); $query = 'select last_insert_id() from table_name'; $result = mysql_query($query); $row = mysql_fetch_array($result);
こちらはMySQLの関数なので、SQLで取得します。それを考えるとPHPを使っているのなら mysql_insert_id() で取得した方が楽かな。
Insertがかぶった場合は?
アクセス数が多く、Insertがほぼ同時に行われた場合に返ってくる値が別のレコードのものだったらどうしよう…という点については心配する必要がないです。同じクライアントからのアクセス内での直近Insertの値を返すようになっているので、それぞれ正しい値が返ってきます。
- Newer: PHPで数値判定する時はご注意を
- Older: ビットマップ写真をベクタデータに変換してくれるWebサービス