Search
  1. mysql_thread_id〔現在のスレッドIDを取得〕
  2. mysql_insert_id〔直近のINSERT操作で生成されたIDを取得〕

mysql_thread_id
現在のスレッドIDを取得

unknown

int mysql_thread_id ( [ resource 接続ID ] )

成功した場合に現在のスレッドID、失敗した場合にFALSEを返します。 接続が一度切断されmysql_ping()関数によって接続された場合、スレッドIDは変わります。 スレッドIDは必要になったその時点で取得するものです。

オプションの第1引数接続IDが指定されていない場合は、mysql_connect()関数により直近に開かれた接続が使用されます。 接続が確立されていない場合は、引数を指定せずmysql_connect()関数がコールされた時と同様に接続を確立します。 それでも接続が確立できない場合は、E_WARNINGレベルのエラーが発生します。

<?
/* 例1: mysql_thread_id() の使用例 */
$dbc=mysql_connect("localhost","root","");
$thread_id=mysql_thread_id($dbc);
if($thread_id){
   printf("現在のスレッドID: %d<br>\n"$thread_id);
}
/* 出力例
current thread id is 73
*/
?>

mysql_insert_id
直近のINSERT操作で生成されたIDを取得

unknown

int mysql_insert_id ( [ resource 接続ID ] )

直近のINSERT操作によりAUTO_INCREMENTカラム用に生成されたIDを取得します。 MySQL接続が確立されていなかった場合は、FALSEが返ります。

オプションの第1引数接続IDが指定されていない場合は、mysql_connect()関数により直近に開かれた接続が使用されます。 接続が確立されていない場合は、引数を指定せずmysql_connect()関数がコールされた時と同様に接続を確立します。 それでも接続が確立できない場合は、E_WARNINGレベルのエラーが発生します。

直近のINSERTクエリがAUTO_INCREMENTな値を生成しない場合は0を返します。 この値を最後まで保存する場合は、値を生成するクエリの直後で、この関数をコールします。

  • この関数は、返り値の型をlong型(PHPではint型)に変換します。 AUTO_INCREMENTカラムがBIGINT型の場合、返り値の型は不正確になるので、MySQL内部関数LAST_INSERT_ID()の方を使用して下さい。

  • LAST_INSERT_ID()の値には、常に直近のAUTO_INCREMENTの値が含まれており、クエリの間ではリセットされません。 この関数は直近のクエリ操作に対して働くため、値を生成したクエリの直後にコールするようにしましょう。

<?
/* 例1: mysql_insert_id() の使用例 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db('db_customer');
mysql_query("INSERT INTO tbl_customer (firstname, lastname) values ('tom', 'cruise')");
printf("最後に挿入されたレコードのIDは、%d<br>\n"mysql_insert_id());
//最後に挿入されたレコードのIDは、4
?>


<?
/* 例2: SQL内部関数LAST_INSERT_ID() の使用例 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db('db_customer');

//ユーザーが指定した値とする
$firstname="tom";
$lastname="cruise";
$age=40;

$sql="SELECT COUNT(*) FROM tbl_customer WHERE firstname='$firstname' AND lastname='$lastname'";
$res=mysql_query($sql,$dbc);
$dat=mysql_fetch_row($res);
if(!$dat[0]){
    // データが無い場合はINSERT
    $sql_insert="INSERT INTO tbl_customer (firstname, lastname, age) VALUES ('$firstname', '$lastname', $age)";
    $res=mysql_query($sql_insert) or die("INSERT失敗 :".mysql_error());
    if($res){
        // INSERTに成功したら、最後に挿入されたレコードのIDを取得
        $res=mysql_query("SELECT LAST_INSERT_ID()"$dbc) or die("ID取得失敗 :".mysql_error());
        $dat=mysql_fetch_row($res);
        print_r($dat);
        $insert_id=$dat[0];
        printf("最後に挿入されたレコードのIDは、%d<br>\n"$insert_id);
    }
}else{
    // 既にデータがある場合は、UPDATE
    $sql_update="UPDATE tbl_customer SET age=$age WHERE firstname='$firstname' AND lastname='$lastname'";
    $res=mysql_query($sql_update,$dbc) or die("UPDATE失敗 :".mysql_error());
    if($res) echo "UPDATE成功<br>";
}
/*
出力例
最後に挿入されたレコードのIDは、13
*/
?>


<?
/* 例3: SQL内部関数LAST_INSERT_ID()を使ってIDを取得する例 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db("db_customr");

#INSERT文発行1回目
$sql="Insert into tbl_customer (firstname, lastname, age) values ('paul', 'smith', 45)";
$res=mysql_query($sql,$dbc);
#IDを取得
$res=mysql_query("SELECT LAST_INSERT_ID()");
$dat=mysql_fetch_row($res);
printf("最後に挿入されたレコードのIDは、%d<br>\n"$dat[0]);

#INSERT文発行2回目
$sql2="Insert into tbl_customer (firstname, lastname, age) values ('will', 'smith', 35)";
$res=mysql_query($sql2,$dbc);
#IDを取得
$res=mysql_query("SELECT LAST_INSERT_ID()");
$dat=mysql_fetch_row($res);
printf("最後に挿入されたレコードのIDは、%d<br>\n"$dat[0]);

/* 出力例
最後に挿入されたレコードのIDは、14
最後に挿入されたレコードのIDは、15
*/
?>

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop

polarized women