勉強したことのメモ

webプログラマが勉強したことのメモ。

MySQLiで直近に挿入したオートインクリメントの値と次回挿入する値を取得する方法

   

phpとmysqliを使っている中で次回挿入するオートインクリメントの値と、前回挿入したオートインクリメントの値を取得したかった。

前回分は以前からたまに使ってたので良いんだけど、次回挿入する値のところで、max(hoge) + 1みたいな形で取得を考えたけど、行の削除が発生すると+1にならないケースがある。なので以下で対応する。

 

//次回挿入する値を取得
$query = '
	SHOW TABLE STATUS 
	LIKE "table"
';
$row = $mysqli->query($query);
if( $row->num_rows == 0 ){ //行が見当たらない場合は1を入れる
	$count = 1;
} else {
	while ($rs = $row->fetch_array(MYSQLI_ASSOC)) {
		$count = $rs['Auto_increment']; //見当たる場合はその値を入れる
	}
}


//直近で挿入した値を取得
$query = '
	INSERT INTO table 
		(aaa, bbb) 
	VALUES 
		(aaa, bbb)
';
$row = $mysqli->query($query);
$count = $mysqli->insert_id; //ここに直近で挿入したオートインクリメント値が入る

 

 - PHP, MySQL, データベース

  関連記事

PHPで画像にモザイクをかけて保存

やりたかった事はPHPで ・モザイク処理 ・元の画像とは別にファイル名をつけて保 ...

MySQLでユニークキーをはる

MySQLでseqとcodeみたいなものをあわせて ユニークキーをはりたかった。 ...

adminerでMySQLに接続しようとするとエラー

新しく構築したサーバにadminerを入れて接続しようとすると、「mysqlnd ...

ユーザーエージェントなどユーザー情報を取得する方法

上からUA、IP、ホスト名を取得。 $ua = $_SERVER['HTTP_U ...

PHPで土日祝を避ける

広告物を土日祝だけ非表示にしたいと言われ、 できたらPHPで行いたかった。 調べ ...

MySQLでREGEXPについて

SQL文にREGEXPというのを見てこれ何? となったのでメモ。 ■参考サイト ...

UTF-16にエンコードされている文字列をUTF-8へデコード

エンコードされている文字列であまり見かけない感じのものがあった。UTF-8やSh ...

PHPで特定のファイル内のみタイムアウトを無効にする

重たい処理をするページだけ、タイムアウトを無効にする場合のメモ。 以下をPHPフ ...

PHPでサイトマップを動的に生成する

WordPress等のCMSは使っておらず、自動更新するサイトがあり、そのサイト ...

mysqlで正規化できない時はシリアライズ使う

アンケートか何かに機能追加している際、配列を カンマ区切りで結合して文字列でDB ...