[MySQLメモ]オートインクリメントするカラムの値をINSERT直後に取り出すには
dfGalleryの画像アップロードがいまいち安定性がないので(特に複数画像の一括アップロード時、さくらだから?)ちょっと自前で簡易のアップローダを作ってみたのですが、その際にMySQLをいじったのでちょっと勉強した点だけメモっておきます。
◆関連:SQLiteメモ:オートインクリメントするカラムの値をINSERT直後に取り出すには
◇参考:Bluestick.JP 開発メモ – SQLServer, MySQL, SQLiteで自動採番列の結果を取得するには    
◇参考:perl DBI 最後に挿入したIDを取得する方法 last_insert_id    
具体的には下の様なコードを書いたのでそのまま貼り付けておきます。
肝心の部分は下の部分で、last_insert_idを使うとオートインクリメントされたidの値を取得する事ができます。
my $LID = $hDB->last_insert_id($cfg{database}, $cfg{database}, "$cfg{dbprefix}content", ‘id’);
SQLiteの場合と違って引数にデータベース名とテーブル名、カラム名?等の引数が必要なのがちょっと面倒ですね。面倒というほどでもないか。
#———————————————————-     
#    DB登録 
#1.kumacchi_content テーブルにタイトルをインサート     
#2.1.のインサート時のオートインクリメントされたidを取得      
#      
# id    uid pid type    title      
# 39     1     33     image     onaji2      
#      
#    3. 2.で取得したidをcidにして 画像3種の登録 kumacchi_contentprop テーブルに      
#      
#   id      cid name           value      
#      110     39     thumbnail_file      FXP0000012.jpg      
#    111     39     image_file     FXP0000012.jpg      
#    112     39     timestamp     1256931224      
#———————————————————-      
sub insertDB{      
    my ($ori,$tumb,$title) = @_; 
my $cnt =0;
    my $hDB = DBI->connect("DBI:$cfg{dbdriver}:$cfg{database}:$cfg{hostname};mysql_server_prepare=1","$cfg{username}","$cfg{password}",{PrintError=>0});     
    unless($hDB){&error($DBI::errstr);}      
    $hDB->do("set names utf8"); 
    my $SQL = "INSERT INTO $cfg{dbprefix}content VALUES(NULL,?,?,?,?)";     
    $hDB->do(‘BEGIN’); 
    my $hst = $hDB->prepare($SQL);     
    unless($hst){&error($hDB->errstr);}      
    my $retval = $hst->execute("1",$kdecode::in{‘album’},"image",$title);      
    unless($retval){&error($hDB->errstr);} 
    #my $LID = $hDB->func(‘LAST_INSERT_ID’);     
    my $LID = $hDB->last_insert_id($cfg{database}, $cfg{database}, "$cfg{dbprefix}content", ‘id’);      
    #&error("$LID"); 
    $SQL = "INSERT INTO $cfg{dbprefix}contentprop VALUES(NULL,?,?,?)";     
    $hst = $hDB->prepare($SQL);      
    unless($hst){&error($hDB->errstr);}      
    $retval = $hst->execute($LID,"thumbnail_file",$tumb);      
    unless($retval){&error("1:".$hDB->errstr);} 
    $SQL = "INSERT INTO $cfg{dbprefix}contentprop VALUES(NULL,?,?,?)";     
    $hst = $hDB->prepare($SQL);      
    unless($hst){&error($hDB->errstr);}      
    $retval = $hst->execute($LID,"image_file",$ori);      
    unless($retval){&error("2:".$hDB->errstr);} 
    $SQL = "INSERT INTO $cfg{dbprefix}contentprop VALUES(NULL,?,?,?)";     
    $hst = $hDB->prepare($SQL);      
    unless($hst){&error($hDB->errstr);}      
    $retval = $hst->execute($LID,"timestamp",time);      
    unless($retval){&error("3:".$hDB->errstr);} 
    #コミット     
    $hDB->do(‘COMMIT’); 
$hst = undef;
    #DB切断     
    $hDB->disconnect;      
}




















![覆面ビリオネア[Undercover Billionaire]のUnderdog BBQでクビになったクリスティン・ミュアーのその後が気になったので調べてみた undercover billionaire](https://i0.wp.com/blog.kumacchi.com/wp-content/uploads/2022/07/undercoverbillionaire.jpg?resize=120%2C120&ssl=1)




![[RAMディスク]Gavotte Ramdiskを導入してみた。 Windows XP – システムプロパティ](https://i0.wp.com/blog.kumacchi.com/wp-content/uploads/2014/02/img_20080517T052214275.jpg?resize=120%2C120&ssl=1)







